Size: a a a

IT KPI C/C++ ХВ (не UB)

2021 March 06

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
левое = 2e10;
правое = 4e10;

// начинаем с левого, ищем первое число, которое удовлетворяет условию
текущее = левое;
с шагом 100 000 проверяем:
   делимость на 7
   условие В

// после этого цикла текущее – это первое и минимальное из всех одновременно
минимальное = текущее;
количество = 1;

// теперь можно считать числа с шагом в 700000
начиная с (текущего) с шагом в 700 000 проверяем:
  условие В
  если выполняется, увеличиваем количество
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
переводим псевдокод в код
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
bool satisfies_B(long long n)
{
   return (n % 13 != 0) and (n % 29 != 0) and (n % 43 != 0) and (n % 101 != 0);
}

void main()
{
auto left = 2e10;
auto right = 4e10;
auto step = 100000;
auto big_step = 7*step;

// начинаем с левого, ищем первое число, которое удовлетворяет условию
auto current = left;
auto min = 0;
auto count = 0;

while (current <= right)
{
   if ((current % 7 == 0) and (satisfies_B(current))
   {
       min = current;
       count = 1;
   }
   current += step;
}

// после этого цикла текущее – это первое и минимальное из всех одновременно
// минимальное = текущее;
// количество = 1;

// теперь можно считать числа с шагом в 700000

///начиная с (текущего) с шагом в 700 000 проверяем:
//условие В
//если выполняется, увеличиваем количество
do
{
   
   current += big_step;
   if (satisfies_B(current)
       count++;
}
while (current < right);

}
источник

SS

Sergej Sheryaev in IT KPI C/C++ ХВ (не UB)
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
теперь думаем о потенциальных ошибках
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
если нужно решить эту конкретную задачу, где мы знаем, что на таком интервале точно найдётся хоть один, то всё ок
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
если же интервал будет другой, то что может пойти не так?
источник

SS

Sergej Sheryaev in IT KPI C/C++ ХВ (не UB)
ну count нулевой будет
источник

SS

Sergej Sheryaev in IT KPI C/C++ ХВ (не UB)
и вся логика поломается ?
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
Какая логика поломается?
источник

SS

Sergej Sheryaev in IT KPI C/C++ ХВ (не UB)
никакая
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
ну вот
источник

SS

Sergej Sheryaev in IT KPI C/C++ ХВ (не UB)
я просто не сразу понял, что делает (satisfies_B(current)
источник

SS

Sergej Sheryaev in IT KPI C/C++ ХВ (не UB)
теперь все понял
источник

SS

Sergej Sheryaev in IT KPI C/C++ ХВ (не UB)
не увидел , что функция сверху
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
Sergej Sheryaev
я просто не сразу понял, что делает (satisfies_B(current)
проверяет условие B: не делятся на 13, 29, 43, 101 одновременно
источник

SS

Sergej Sheryaev in IT KPI C/C++ ХВ (не UB)
я просто спал мало
источник

SS

Sergej Sheryaev in IT KPI C/C++ ХВ (не UB)
ничего не вижу
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
Sergej Sheryaev
я просто спал мало
я просто написал её не сразу
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
написание программ – это итеративный процесс
источник