Только этого перебора уже давно нет в программе. Мы ведь обсуждали. Применяется короткая арифметика по 20-й степени 2-ки, а не по 15-й. Я тестировал. Оптимальна была 20-21 степень, а не 15-я.
Я его и имею в виду.
Последнее к чему пришли, это к перебору d=n%p по простым и подсчёте nf[#v-d] и как только nf==nu, так проверка isprime. Цикл по n при этом сделан через накопление готовых остатков с Mod. Медленный цикл foreach+factor с порогом 2^20 (и с 2^18) выполняется уже после этой предпроверки (фактически заменяющей factor с меньшими порогами). Во всяком случае у меня в коде именно такая версия последняя.
15-я степень удобно ложится в AVX, следующая удобная 31 (ну или любое простое меньше), но их вдвое меньше в регистрах и потому почти вдвое медленнее цикл, а уж из-за возрастания числа операций медленнее намного (ещё пропорционально количеству простых).
Чисто в принципе могу и написать ispseudoprime на асме для чисел до 6e57 (192 бита) или сразу до 1e77 (256 битов), но это куча нового непроверенного кода, 24 умножения в первом случае и 42 во втором плюс море сложений и пересылок (это всё в произведении по модулю, которое нужно для степени по модулю, которая нужна для теста Ферма на простоту).