У меня 130e6 стека не хватило, вылетел через 16ч счёта, для числа 923...492. Так что лучше сразу давать ему гиг или два и не жадничать.
-- 16.06.2022, 15:04 --HuzHugo, in the documentation for PARI it is written that all functions of working with divisors are internally implemented via factorint(), i.e. full factorization. This is the first. Secondly, PARI can be forced to save the found large primes and then check them first at any attempt to factorize a large number, i.e. calling numdiv()+factor() or factor()+numdiv() in a row will not double the factorization time, the second function will be executed instantly - i.e. any of them performs full factorization.
-- 16.06.2022, 15:09 --Кстати именно на этом трюке основан мой вариант частичной факторизации, когда полной факторизации не проводится если устанавливается что делителей точно неподходящее количество: вызывается factor() с ограничением (на величину простых или времени выполнения) и даже если не завершилась успешно, то всё большое найденное (простые больше 16млн) сохранила и при последующем вызове фактически продолжает работу, разлагая лишь последнее составное число, а не всё с начала. Трюк описан в документации к PARI, искать по имена параметра factor_add_primes.
К сожалению простые сохраняются не любые, а только входящие в разложение, потому не получается продолжить разложение составного числа если ни один из его делителей не был найден.
Как и не получается заставить factor() продолжить перебор эллиптических кривых (или других перебираемых параметров в других методах) не с начала (что кстати кажется возможно на том сайте). Так что трюк полезен только когда в процессе был найден хотя бы один новый делитель, иначе большое составное число так и остаётся составным с неизвестным разложением.
Опять таки к сожалению я не нашёл как заставить factor() не продолжать факторизацию по нахождению любого делителя, а вернуть его нам чтобы уже мы решали стоит ли разлагать дальше или плюнуть (например если делителей уже больше требуемых), потому приходится ограничивать просто по времени, что при следующем вызове повторяет часть уже выполненной работы.
-- 16.06.2022, 15:21 --Код:
print(n," Yess!!!);break))))))};
В print надо бы закрывать кавычки.
-- 16.06.2022, 15:45 --EUgeneUSТак что в программе где Вы проверяете числа можно в начале добавить
default(factor_add_primes,1);, а потом после вызова
numdiv(n) спокойно вызвать ещё и
factor(n) (на то же число или хотя бы его делители), которая выполнится
мгновенно и выдаст полную факторизацию. Или в обратном порядке, без разницы.
Только если проверяете разные числа без выхода из PARI, то стоит перед проверкой нового числа добавить и
removeprimes; для очистки накопленной таблицы больших простых из разложений предыдущих чисел, ведь для новых чисел они не подойдут.
Вот например кусочек моей программы для проверки хорошо разложимых цепочек:
Код:
x=18652995711772;
default(parisize,130*10^6); \\Может быть мало и лучше пожертвовать гиг или два
default(factor_add_primes,1); \\Будем сохранять простые из разложений больших чисел
print(x); removeprimes; \\Старые простые удалим
{for(d=1,9,
f=factor(x+d-1); fd=numdiv(x+d-1); \\Вторая выполнится мгновенно
print("+",d-1,":",fd,"\t",f);
)}