Я же правильно понимаю, что эти 6 проверяемых мест проверяются до первого неуспеха, а не все шесть всегда?
Правильно:
Код:
foreach(z1,d, if(!ispseudoprime((n+d-1)/vv[g,d]), next(2))); \\Проверим все проверяемые места, дальше пройдут только цепочки ALL
При первом же неуспехе сработает
next(2) и произойдёт переход к следующей цепочке. Оптимизировать порядок проверки тут смысла ровным счётом никакого.
Так если получили "1" в позиции, исключающей цепочки 12 и 13, то остальные проверки можно не делать, ноль там будет или единица...
Это уже несущественно, секунда на цепочку, считанные часы на круг 1e70. Многие единички получаются уже первой же факторизацией, по простым до
, что вообще за доли секунды происходит.
Оптимизировать можно много чего, но всё это уложится в единицы часов на круг 1e72 (единицы процентов скорости), и смысл тогда усложнять код ... Пусть уж лучше статистика будет немного точнее.
Вот кстати 4 круга после перезапуска прошло, но какого-то ускорения не заметил, время так и осталось порядка 6200с на круг. А точные количества делителей стали несколько реже.