Факторизация таких огромных чисел уже занимает заметное время. Так что интерес к её оптимизации пока сохраняется.
Как я это делал при поиске ещё больших чисел (скажем порядка 1e80), у Вас кстати мог остаться и готовый код например от M36n13:
заводим вектор флагов s[] что число цепочки точно не подходит или разложено полностью;
в простых фильтрах указываем какие числа полностью разложились чтобы не раскладывать повторно;
после простых фильтров запускаем разложение каждого недоразложенного числа на секунду (меньше нельзя) командой alarm() и проверяем разложилось ли оно;
если разложилось и не дало нужное количество делителей или и не может уже дать - тоже выставляем флаг;
если набралось много недопустимых чисел (т.е. valids точно мал и такие не интересны) - обрываем проверку;
повторяем разложение оставшихся чисел уже с ограничением на 3 секунды;
повторяем разложение оставшихся чисел уже с ограничением на 15 секунд;
повторяем разложение оставшихся чисел уже с ограничением на 90 секунд;
если valids оказался достаточно большим - запускаем полное разложение оставшихся чисел.
Вот пример цикла разложения цепочки с ограничением на 1с (указывается в alarm):
Код:
s=vector(#v);
...
for(d=1,#v,
if(s[d]>0, next);\\Дораскладывать лишь оставшиеся числа
if(type(alarm(1,factor(n+d-1)))!="t_ERROR",\\Дадим 1с на разложение
s[d]=numdiv(n+d-1); if(s[d]!=nd, break);\\Если успело разложиться проверим подходит ли (numdiv выполнится моментально)
,
f=factor(n+d-1,2^15); fn=matsize(f)[1];\\Не успело, проверим все ли делители найдены, до 2^15 проверяется очень быстро
if(ispseudoprime(f[fn,1]), s[d]=numdiv(n+d-1); if(s[d]==nd, next, break));\\Если все, то проверим подходит ли число
if(prod(i=1,fn-1,f[i,2]+1)>nd/4, s[d]=1; break);\\Если не все, то проверим не слишком ли много делителей уже найдено
);
);
Разумеется для быстрой работы необходимо
default(factor_add_primes,1).
При использовании alarm() стоит иметь в виду
глюк с ней в PARI и почаще (несколько раз в сутки) проверять не вылетела ли программа.
Либо разобраться и подправить (под убунтой).
