Не могли бы Вы объяснить нотацию чисел после "maxlen=". Про первые три - догадался. Но вопрос связан вот с чем: вероятно будут находиться кандидаты в 21-ку, в которых полностью не разложатся все числа. Как их искать в логах?
Да, извиняюсь, забыл про это рассказать.
Первое число после maxlen= это именно длина максимальной непрерывной цепочки.
Второе и последующие - это сколько чисел слева прошли тест номер 1,2,3,4, точнее на каком числе соответствующий тест остановился (или закончился если дошёл до правого конца цепочки). Разумеется в каждом тесте допроверяется лишь числа с 0 делителей (т.е. всё ещё потенциально могущие дать нужное количество делителей), проверка идёт слева направо по цепочке. Тесты ограничены так: первый простые до
, второй простые до
, третий 3с на каждое место, четвёртый 60с на каждое место. 60с по идее должно хватать для полного разложения, но если даже вдруг не хватит, то можно будет допроверить руками. Для полностью разложенной цепочки будет maxlen=21/21/21/21/21 и FOUND и запишется в отдельный файл M48.FOUND21.txt и счёт во всех потоках остановится на границе круга.
Цепочки не давшие /21 на первом тесте (т.е. точно не подходящие под искомые) в лог не выводятся, это отрезается командой if(rr1<nn, next); в 47-й строке .gp файла.
Каждый следующий тест запускается только если предыдущий дал кандидата ровно 21 длиной, это условие if(rr2==nn, и аналогичные в некоторых строках.
Все эти условия (по крайней мере первые три теста) весьма заметно влияют на скорость счёта так что менять не стоит, к тому же цепочки длиной менее 21 уже не интересны, именно поэтому выбрана такая схема проверки.
Если вдруг кто захочет поэкспериментировать с другими настройками тестов: шаг step уменьшать не стоит, лучше ограничить диапазон паттернов, заменив в 12-й строке маску "M%dn%d-???-???.exe" на менее общую, например "M%dn%d-?01-11?.exe" (всего 20 паттернов вместо 5760, причём включая и зеркальность).
Как искать в логе: в консоли есть команда
findstr "\/21\/20" M48n21-?.txt - для поиска цепочек давших 20 на втором тесте, обратный слеш нужен так как обычный является спецсимволом и должен "экранироваться". Для 21 на первом, 21 на втором и 19,20,21 на третьем:
findstr "\/21\/21\/21 \/21\/21\/20 \/21\/21\/19" M48n21-?.txtНайти недоразложенные цепочки для ручной допроверки можно командой
findstr "\/21\/21\/21\/21" | findstr /V "FOUND" - т.е. все тесты прошли, но FOUND нет, т.е. что-то где-то недоразложилось. Чтобы не искать их в логах добавьте после 79-й строки с записью найденного в FOUND ещё строку
if(rr4==nn && maxlen<nn, write(strprintf("M%d.TOCHECK.txt",nd), ff[g],":",w)); и все недоразложенные кандидаты соберутся в одном общем для всех потоков файле. Я заменил .gp файл в облаке (не в архиве, там старый, только отдельно лежащий) на с этой доработкой, можете посмотреть куда что как вставить.
-- 21.06.2022, 19:23 --Тем временем сделал ускорители для 14 чисел по 72 делителя, там же в облаке, папка M72n14. Тоже только x32 SSE версия, под x64 работает (и лучше чем под x32).
Архив с ускорителями, .gp файлом перебора и файлом лога с примером запуска. Лог и .gp файл так же положил и отдельно.
Доработка с недоразложенными цепочками отдельно внедрена. Тестов выполняется 5, так как числа сильно больше и 60с может не хватить для разложения, добавлен тест с ограничением в 900с на каждое место, это сильно долго, но срабатывать он будет хорошо если раз в день, потому на общую скорость вряд ли повлияет.
Круг (кстати почти ровно 3млн шагов) сделал не 2ч, а 12 минут, всё же 2ч как-то многовато, тем более если у других счёт медленнее, то 2ч превратятся в 4-5-7, что ну совсем много. Кто хочет по другому - меняйте step. Как быстро проверить изменения описал выше (временно изменить маску на менее общую вплоть до одного-двух паттернов и тестировать).
Ускорение от 4-х проверяемых чисел ещё снизилось, коэффициент фильтрации стал не 720, а всего 220, и скорость где-то 4.5млн/с вместо 18млн/с. И доля времени в ускорителях снизилась с трети до 1/6. Маловато. 83% времени тратится в PARI, что не есть хорошо.