Спасибо. Похоже что оптимум лимита где-то в районе 10^9 — 10^10.
Ну там надо смотреть на B1; привязка лимита к B1 весьма условная.
-- добавлено через 40 секунд --Вы это проверяли обычным if(!ispseudoprime(...),1)? У меня пока так делается.
Без единицы.
-- добавлено через 17 минут --И опять остаётся вопрос: а что делать со второй половиной чисел, откладывать на потом или вовсе выбрасывать. Если бы их было мало, не половина, а 20-30%, то можно было бы отложить на потом.
Так для этого и нужно ТЗ и эталонная функция. Понимаете, может оказаться, что встроенная факторизация работает так же быстро в итоге, потому что там в одном флаконе сразу всё, включая проверку на простоту.
Попробуйте не
numdiv(n), а
factorint(n,4) Количество простых множителей там же просто считается
nfac=factorint(n,4);
if(#nfac[,1]>2,print("это отбросить"),print("это прошло"));Более того,
numdiv() нативно принимает в качестве аргумента результат факторизации, то есть будет работать конструкция
if(numdiv(factorint(n,4))!=4,print("это отбросить"),print("это прошло"))Вот вам кастомный ECM (вызов встроенного):
Код:
install(Z_ECM,GLLU);
isnl(x=0)=x;
my_ecm(n,rounds,seed,b1)=isnl(Z_ECM(n,rounds,seed,b1));
Эта
my_ecm() возвращает множитель или нуль если множитель не найден.
rounds - количество попыток (кривых), чем их больше чем будет дольше работать на "трудных" числах. Я поставил 2, если больше то и находит больше но намного дольше.
seed - "зерно", можно просто ноль
B1 - тайный параметр, вот с ним надо эксперементировать, чем он больше тем дольше будет работать, больше находить но медленнее. Для ваших 270 чисел я бы ставил 800..1600