Сейчас уже не надо?
Ну, если считать M36n15 не будем (или не будете), то и не надо.
Ну а я жду ответы на вопросы про КМК.
Я посчитал их риторическими и неактуальными. Например в M36n13 уже присутствует
вместо квадрата и получается уже они были не КМК. Фактически КМК (если ещё не обращать внимание на исключение с двойкой) остались в силе лишь для M12n15/14, а ими похоже занимаетесь только Вы.
Также интересно Ваше мнение, как переделать проги с подквадратного 41 на 43.
Заменить 7 на 8 в r=Set([]), плюс оставить bb=[5,37]. Сам не пробовал, но
новых подводных камней не вижу.
Здесь Вы правы насчёт перебора всего множества паттернов. Если имелись в виду именно различные подклассы патернов.
Тут имелось в виду разное, но как минимум — перебор вариантов с перестановками простых в квадратах между непроверяемыми местами, что вообще никак не влияет на программу кроме единственного числа
из
, т.е. только на начальную инициализацию таблицы save_xmm (которую можно раздублировать нужное количество раз вместе с кодом её модификации и проверки и оптимизировать именно не проверку её в глубину, а проверку разных её вариантов, но как и говорил это почти полное переписывание кода). В принципе перестановка других простых (11 и 13) тоже вроде не влияет ровно настолько же, но тут не 100% уверен, надо подумать, да они (эти перестановки) и сильно менее регулярны, что всегда проблема для программиста.
Думаю начать пока с перехода к 92160 паттернам на низинах. Аллокэйтмем мне приходилось брать пока
.
Этого простите не понял. Если просто объединить два разных класса паттернов в один список, то это легко (просто увеличить M12mods1.patterns и всё, я же говорил что главное получить список паттернов, дальше за исключением некоторых моментов всё просто), но вот PARI программы перебора придётся внимательно проверить чтобы там нигде не было явного указания на величину шага/модуля pp.mod, а он обязательно брался из файлов .v/.pat для каждого паттерна. Сейчас, для новых поисков, у меня так и есть (даже маску проверяемых чисел z[] формирую сразу в M12mods1.patterns), но как было тогда и чем сейчас пользуетесь Вы я не уверен.
результат:
Спасибо, ожидаемо. Выходит у Вас кэш не настолько маленький или не так сильно влияет, как было на
других программах у
Yadryara.
Правда теперь уже не знаю будем ли считать M36n15 в таком варианте ...
У меня за почти сутки счёта и 1.6млрд шагов по всем 5760 паттернам (т.е. почти 10трлн попыток) так и не нашлось ни одной ALL цепочки, логи совершенно пусты, даже выкладывать/показывать нечего.
Вот только не знаю, насколько поломает благостную картину квадрат большого простого.
Портит, и сильно: квадрат резко ограничивает допустимость подстановки других простых (в квадратах), но это как бы даже и благо, но вот что с ростом чисел большие простые в квадрате встречаются всё реже и реже (сильно реже обычных простых), это беда. Т.е. линейный перебор 7-ми простых даже с очень большим шагом тут помогает мало, в 99% не извлекается даже корень, не говоря уже об простоте числа под ним. А моя программа сейчас не умеет проверять извлечение корня, значит практически все найденные ею кандидаты будут ошибочными и в PARI отбросятся, впустую заняв время на проверку.
Выходом был бы перебор именно по
, тем более что вероятно там допустимо очень далеко не любое
, как и делал
VAL например в случае c 30-ю делителями, но как тут присобачить ускорители неясно, они слишком заточены на линейный перебор, попытка заставить перебирать по квадрату (что в принципе возможно) съест всё ускорение. А перебирать триллионы
в чистом PARI ... перспективно, но надо подумать как (какой системе модулей должно отвечать
, я с этим не до конца разобрался).
-- 27.04.2022, 16:21 --Аллокэйтмем мне приходилось брать пока
.
Это забыл прокомментировать (из-за малопонятности что здесь такого). Память нужна для размещения списка паттернов (тем более они с полными путями) и для размещения списка найденных кандидатов из моей программы (его размер и добавляется к N). Первое фиксировано (пока пути не меняются) и легко оценивается, второе легко регулируется величиной интервала 227e6 или 23e6, передаваемого моей программе для проверки вторым параметром.
Плюс нет никакой опасности зарезервировать хоть на порядок больше памяти чем реально потребуется: винда незадействованную память оставит сугубо виртуальной и физически размещать ни в RAM ни в файле подкачки не будет. Пока туда не произойдёт физической записи (т.е. она станет используемой). Потому обычно можно запросить хоть гигабайт-полтора (а на x64 винде и терабайты и петабайты). Правда есть засада: бывает при выделении памяти
пользовательская программа (в данном случае сам PARI, не винда) её инициализирует (и не нулями), что переводит её в статус используемой и физически представленной в RAM и/или файле подкачки (я даже в каких-то рекомендациях встречал инициализировать выделенную память сразу чтобы избежать тормозов в произвольном месте потом). Как действует PARI я не знаю. Но никаких трудностей с выделением сотен мегабайт не замечал, потому выделяю с большим запасом и не парюсь.
Единственный непонятный момент связан с parisize
max: у меня если его сильно задрать и память реально потребуется, то закрываться программа по завершении счёта может аж
минуты (что бесит), видимо высвобождение занятой памяти в PARI весьма глючно/тормознуто. С parisize такой проблемы нет и потому я предпочитаю увеличивать его (даже если память и не потребуется, винда сама разберётся).