В этом и смысл. Всего в 13 раз больше, а не в 71 и не в 52.
Это возврат к
линейной проверке. Пусть и только по 71. Почему я и не понимаю в чём тут выгода если можно ровно тот же интервал проверять в 71/52=1.365 раза быстрее (минус накладные расходы на пропуск остального интервала, но для достаточно больших считаемых интервалов я надеюсь сделать их малыми).
Вот сделал тест на 71#, вычисление только 1-2e26, время уменьшилось с 181с до 43.6с, всего лишь в 4.16 раза вместо 5.56 раз. Но это код пропуска лишь на 32 юнита @71#, не сразу на кусок из 20736, того ещё не писал.
С другой стороны, этот тест работает со скоростью 407e6/с юнитов @71# вместо 522e6/с юнитов @67# текущей программы. Понятно почему - хуже отфильтровываются кандидаты при проверке по простым 73-127 вместо 71-127 и потому остальные проверки запускаются в 1.365 раза чаще, а они занимают 70% общего времени.
Тогда выгоднее вообще запускать текущую программу поиска в 67#, только начинать не с 0, а с n*67#. И тогда если кортеж найдётся до n=52*407/522=41, то это будет быстрее. Да, хороший вариант. Код подправить чтобы он инициализировал таблицы не с 0 не так сложно. В интервале [0, 41*67#] ожидаем
кортежей, или с вероятностью в 2 сигмы (95.45%) их будет от 2 до 13 штук или с вероятностью 1% их окажется меньше 1шт. Да, выгодно.
Можно даже найти тот интервал n*67#, в котором вероятность обнаружить менее 1 кортежа составляет 50% (собственно его уже находил, это где мат.ожидание равно 1, на 2.6*67#, можно взять 3*67#) - и вот его и перебирать, весь, начиная с чистых групп. Не найдётся - переходить к следующему чуть большему (из-за падения мат.ожидания) куску.
С третьей стороны, в 67# ожидалось
грязных кортежей с valids=19, а найдено лишь 3 и если больше не найдутся, то вероятность такого всего лишь 5.2%, однако оно реализовалось. Потому слишком уж опираться на вероятность и мат.ожидание рискованно.
Только очень скучно.
Да, мне тоже интереснее поковыряться с разными методами и алгоритмами и прочим (например применить в тесте простоты Ферма для 128-битных чисел, что только что написал, редукцию Монтгомери что должна дать минимум 10-кратное ускорение проверки, а может и 100-кратное, там же вообще не нужна операция взятия остатка по модулю, которая занимает 600-900 тактов при том что даже три нужных ей умножения займут около десятка тактов), но если ставить задачу найти 19-252 (а например Демис помогает решить именно её), то выгоднее считать скучно, но быстрее.
Вот же они 5 юнитов подряд посчитанные ночью без лишней нагрузки на комп. Все как один по 55 с лишним минут.
Мне остаётся только повторить что если хотите
установить причину повышения скорости, то сравнивать надо
один и тот же юнит, а не разные. Иначе сравнение в разных условиях и неизвестно что на что и как влияет. Может у вас температура в комнате упала на градус (ночью совсем не удивительно) и потому улучшился теплосъём с проца что дало ему возможность поднять частоту на 2%, вполне правдоподобно. Независимо от клавы и юнитов.
Рекорд скорости да, установлен, его причина - нет, осталась неизвестной. Я только про это.