Далее - набор необязательных простых в квадрате можно увеличить, скажем до

включительно, это несколько ухудшит LCM, но даст ещё кучу "хороших" шаблонов.
Включение одного дополнительного простого увеличивает количество паттернов в 10 раз (1 старый набор простых плюс 9 наборов с заменой одного из 9-ти простых на новое). Добавление второго нового простого увеличивает количество ещё в 9 раз (предыдущее новое простое на это не меняем). Третье ещё в 8 раз. Четвёртое (73) ещё в 7 раз. Итого 9!*10*9*8*7=1828915200 штук. Почти 2млрд.
Даже если проверка по каждому будет занимать 10 секунд, (а меньше нет смысла - больше потратится на вычисление служебных массивов по паттерну, не отказываться же от скорости перебора), это порядка 2млн простых можно перебрать, то это 18.3млрд секунд или 580 лет в одном потоке. Ну пусть даже в 5 раз меньше, сотня лет в одном потоке. Всего лишь на
один круг проверки всех паттернов ...
Пусть даже мы найдём пару сотен потоков, но одним кругом ведь дело не завершится, надо хотя бы сотни кругов, а может и миллионы ...

Так что эта идея увеличения количества паттернов хорошая, но стоит вовремя остановиться.
Если отказаться от пары методов ускорения проверки и не вычислять служебные массивы (T[] и условия в if), то такую программу (на PARI) сварганить несложно. Тогда можно уменьшить количество перебираемых простых в круге (до тысяч, меньше снова нет смысла, вычисление расстановки станет дольше её проверки) и сократить время на круг до дней-недель.
А теперь вопрос: а сколько кругов надо сделать чтобы найти решение? Про М48n21 не знаю, а вот для M12n15 прикинуть можно:
первый поиск проверил не менее 66387422053662391209161093722597723545 / 440538835723387181869888800 = 1.5е11 кандидатов для каждого из 46080 паттерна;
второй (или какой он там был по счёту) поиск проверил 80215613469168729088982885848674841 / 321796081609486619335200 = 2.45e11 кандидатов для каждого из 46080 паттерна;
итого было проверено не менее 46080*(1.5e11+2.45e11)=1.8e16 кандидатов (на самом деле в несколько раз больше, были и другие поиски).
В соседней теме обсуждается ускорение этой (и аналогичной M48n20) программы на PARI, лучшая скорость 0.3млн кандидатов в секунду, без методов ускорения будет максимум 0.1млн/с. Перебрать 1e16 кандидатов со скоростью 1e5/c надо 1e11с или 3000 лет в один поток.
Да, скорее всего первое решение встретится значительно раньше конца всего перебора, но вопрос насколько раньше.
-- 01.10.2025, 20:53 --EUgeneUSПоясню почему невыгодно перебирать по одному кандидату в каждом паттерне: чтобы получить проверяемое число надо выбрать расстановку простых в квадрате, это цикл forperm, потом для выбранной расстановки вычислить КТО для минимум 10 аргументов (1 посчитанный ранее для всех остальных мест кроме этих 9-ти) и только потом можно выбирать следующее простое и проверять не даёт ли оно решение. ispseudoprime для составных чисел вроде бы быстрее chinese (КТО) и уж точно даже частичная проверка по небольшим модулям (что простые не попадают на занятые места) во много раз быстрее chinese. Потому выгоднее медленно вычислить КТО, а потом быстро линейно (kan=base+i*m) пройтись по сотням-тысячам чисел проверяя каждое из них.
Если хотите, могу сделать такую программу, на базе хоть 3-х, хоть 9-ти (ожидаю что он будет выгоднее) цифирного паттерна M48n21, но только одного, не десятков тысяч штук конечно, т.е. основные простые перераставлять не будет, только дополнительные. Даже самому интересно какова будет её скорость, насколько меньше той что без перебора простых в квадратах ...