grisЯ расширение цепочки от данного числа x до цепочки [a,b] обычно делаю так:
a=x; while(numdiv(a-1)==24, a--);\\Один вариант цикла
b=x; while(numdiv(b++)==24, ); b--;\\Другой
len=b-a+1;Разумеется ради скорости можно добавить предварительные проверки.
+++
griswhile очень прост: пока условие верно (не равно нулю) (проверяется перед телом цикла) выполняет тело цикла. until наоборот, выполняет тело цикла пока условие в итоге (проверяется после тела цикла) не станет верным (не равным нулю). Поэтому while (как кстати и forXXX) может не выполниться ни разу, until же выполнится минимум один раз (до первой проверки условия).
Я until практически не применяю, путаюсь с ним, while/for+if+break хватает.
+++
grisЕщё, чтобы не плодить уровни вложенности и искать закрывающие скобки в конструкциях вида
if(f,
...
);я предпочитаю то же самое делать делать так:
if(!f, next);
...Повышается наглядность.
+++
grisМожно наверное чуть ускорить программу добавив проверку (выделена курсивом) что подходящее число уж точно не одно:
if(numdiv(i)==m && (numdiv(i-1)==m || numdiv(i+1)==m),Следующие проверки не будут выполняться если оба соседа неподходящи.
-- 28.09.2025, 22:03 --Условие нахождения всех 19-ти пятёрок до 1e19 прошу соблюдать.
Этого недостаточно, вот код отрабатывающий за
0.05с и тем не менее находящий все 19 пятёрок:
Код:
shag=98789231; ost=[6505035, 10837466, 21584711, 24204887, 27805835, 36465414, 44511811, 48396554, 54144785, 64849835, 68781488, 70411790, 71040881, 83326440, 84896719, 85150292, 98290304, 98385133];
Всё остальное остаётся как есть.
Разумеется это не считается решением задачи, ведь очень много пятёрок
в любом другом диапазоне будет пропущено. Однако хорошая иллюстрация недостаточно корректного условия.