По прежнему не понимаю, что это значит и не понимаю почему ровно половина чисел взята.
При заданных (мной) параметрах делитель нашёлся у половины чисел, у второй половины - не нашёлся.
-- добавлено через 1 минуту --"Полная факторизация" делалась через factor или через numdiv? Вроде как numdiv не делает полную факторизацию,
Обе делают полную.
-- добавлено через 8 минут --Ваш (с Квеном) код
Самая короткая попытка реализации:
Код:
ecm_fast_capped(cha, max_size = 10^12, tries = 15, timeout_sec = 1) = {
\\ B1=10000 покрывает факторы до ~10^12 с вероятностью >90%
my(B1 = 10000);
alarm(timeout_sec, return(1)); \\ Жёсткий таймаут на весь поиск
for(t = 1, tries,
my(f = ellfacteur(cha, 0, B1)); \\ Stage 1 ECM, возвращает первый найденный фактор
if (f && f < cha,
if (f <= max_size, return(f)); \\ Нашли маленький → возвращаем
\\ Если фактор > max_size, пропускаем эту кривую
);
);
return(1); \\ Подходящий делитель не найден
}
Работать не будет, функция которую вы хотите использовать, объявляется (файл
/pari/src/basemath/ifactor1.c) так:
Код:
/* ellfacteur() tuned to be useful as a first stage before MPQS, especially for
* large arguments, when 'insist' is false, and now also for the case when
* 'insist' is true, vaguely following suggestions by Paul Zimmermann
* (http://www.loria.fr/~zimmerma/records/ecmnet.html). --GN 1998Jul,Aug */
static GEN
ellfacteur(GEN N, int insist)
{
То есть принимает два параметра, а не три.