Почему в одном случае удивительно, а в другом — нет.
Не знаю, пожалуй я пока не определился с точными критериями удивительности результатов ИИ ...
Ну вот ещё ускорить удалось, сделав цикл по тому простому которое с 3-кой:
Согласен, уменьшение количества итераций полезно практически всегда (когда не слишком усложняет внутренний код).
Ну в практическом смысле, например, поиск 21-к вроде актуален, причём сразу в нескольких смыслах.
[...]
Так что логично было пока что рассмотреть цепочку попроще.
На любых доступных языках, лишь бы быстрее было.
Мой вопрос о языках связан с тем что методы оптимизации на разных языках достаточно сильно отличаются. Тем более при сравнении компилируемых и интерпретируемых (как PARI) языков.
Да, алгоритмические методы оптимизации часто применимы на любых языках, но опять же, не всегда дают желаемый эффект (особенно если ускоряют не на порядки).
Искать КПППЧ21 на PARI - редкое извращение: при ожидаемом количестве вариантов за квинтиллион (1e18) попасть на решение можно лишь случайно. Соответственно обсуждать
специфичные именно для PARI способы ускорения (например возведение -1 в степень вместо простого if)
в плане применения их к поиску КПППЧ21 - не слишком разумно.
Если же речь про M48n21, то да, её на PARI искать можно (n20 же нашлась), но почему тогда не сказать об этом сразу и прямо, мол как ускорить поиск M48n21, а не просто "быстрые программы" не пойми на чём и для чего. И многие методы ускорения для M4n3 и M48n21 будут
разными, потому что при их поиске тормозят разные команды. Например для чисел где-то до 1e60 factor() (и соответственно numdiv()) вполне справляется, а для сильно более длинных приходится его ограничивать левыми (и глючными!) средствами и оставлять кандидаты на внешнюю ручную проверку. Или проверять числа не подряд до упора (получения точного значения numdiv), а пытаясь максимально быстрыми тестами отбросить кандидата как можно раньше, чего для M4n3 просто не нужно. И так далее.
Потому я не вполне понимаю как можно обсуждать "всё в одном", и PARI, и С/асм, и короткие цепочки, и длинные.
-- 24.09.2025, 15:42 --Осталось только оптимизировать полную факторизацию numdiv, заменив (если получится) на более быструю проверку на полупростоту. Но может и не получиться т.к. numdiv встроенная и уже максимально быстрая факторизация.
Не скажите, можно пробовать заменить numdiv() на быструю (да ещё и многопточную) внешнюю прогу, например ту же YAFU.
И опять же, есть большая разница в использовании YAFU для чисел до 1e50 (секунды на разложение) и свыше 1e120 (часы) или 1e200 (годы) и методы использования тоже будут разными. Для больших чисел даже ispseudoprime() тормозит и придётся её предварять какими-то ещё более быстрыми тестами.
-- 24.09.2025, 15:52 --заменив (если получится) на более быструю проверку на полупростоту
Насколько я понимаю для чисел общего вида нет способа отличить разложение pq от pqr (на два или на большее количество простых).
-- 24.09.2025, 15:57 --Кстати про M48n21. Ведь при их поиске можно вообще отказаться от факторизации и разместить по всем местам столько малых простых, чтобы неизвестными остались лишь ровно по одному простому в каждой позиции. Искомые числа резко возрастут, вероятность нахождения ещё резче снизится, зато ispseudoprime сильно быстрее numdiv/factor. И что пересилит ещё вопрос.
Как и вопрос искать ли по одному паттерну или сразу по всем.
VAL же ищет по одному (или нескольким, не уверен, но точно не по сотням тысяч) и находит, в том числе мировые рекорды, значит и такой подход имеет право на жизнь и может быть выгоднее перебора всех возможных паттернов (как делалось для пентадекатлона M12n15 и некоторых других).