Дописал вроде новую версию em3() c 29 страницы.
С поллардом и mpqs-ом, и честным подсчётом высших степеней табличных простых.
Из ~20 миллионов цепочек до фирального numdiv-а прошла одна, которая и прошла.
С терапевтикой в однопотке на планшете скорость ~190 тыс/сек, без - ~60 тыс./сек
То есть скорость в итоге повысилась за счёт терапевтики, а вот поллард дополнительно скорость не повышает.
Но я наткнулся на необходимость ещё одной проверки: по тем числам где делителей мало, я проверяю остаток(частное) на простоту, и выявляю числа с явным недобором (только проверка остатка(частного) на простоту), их оказывается примерно 55 цепочек на миллион в случае терапевтики и 170 если без. На стадии табличной проверки это наверное было бы замедлением, а вот после - норм. И уже после этой проверки, когда отсеяны цепочки с явным недобором, наступает черёд полларда, и если он не смог, то mpqs-а.
Статистика.
Без терапевтики, 20 млн цепочек:
Код:
Поиск D(48,21)
База n0=283938699868309713921641266159023371777169
шаг 2*m=458807004108608150236210618789181133892800
Задание: Старт: 0 шагов:20000000 Таблица простых до:1048576
Паттерн:секретный. Подготовился за:25 ms
Дошло до numdiv:52556626259340931919271848023566857910792017169
Найдено D(48,21):52556626259340931919271848023566857910792017169
666-й поток кончил. Дошло до numdiv: 1 Найдено:1 Отброшено:19999999
Фильтры терапевтика:0 таблица:19996537 недобор:3430 Поллард/mpqs:32 numdiv:0
Проверок псевдопростых:21024595 Проверок поллардом/mpqs начато:101 Поллард/mpqs нашёл множитель:111
С терапевтикой, те же 20 млн.
Код:
Поиск D(48,21)
База n0=283938699868309713921641266159023371777169
шаг 2*m=458807004108608150236210618789181133892800
Задание: Старт: 0 шагов:20000000 Таблица простых до:1048576
Паттерн:секретный. Подготовился за:13 ms
Дошло до numdiv:52556626259340931919271848023566857910792017169
Найдено D(48,21):52556626259340931919271848023566857910792017169
666-й поток кончил. Дошло до numdiv: 1 Найдено:1 Отброшено:19999999
Фильтры терапевтика:14556473 таблица:5442409 недобор:1109 Поллард/mpqs:8 numdiv:0
Проверок псевдопростых:5760033 Проверок поллардом/mpqs начато:47 Поллард/mpqs нашёл множитель:52
Поллард/mpqs находит больле множителей чем начато проверок потому, что в ходе одной проверки, если остаток(частное) композитный, он запускается на проверку поллардом/mpqs опять.
Код для проверки mpqs-ом
Код:
install(mpqs,G);
my_mpqs(n:int)=my(divisor=component(mpqs(n),1));return([divisor,n/divisor]);
возвращает два множителя. Их надо, по-хорошему, оба проверять на простоту.
Вероятность там поймать составное уже совсем небольшая, но эта логика у меня недописана пока.
В итоге, я думаю отказаться от полларда в пользу
mpqs-а, а то и
factorint-а.