Не надо, любой for заменяем на parfor и долго мучаемся с глобальными переменными.
Ну дык кто ж заставит-то красиво делать

мучайтесь, раз видите другие плюсы
-- 12.03.2026, 18:05 --YadryaraЕсли будете пробовать встроенный Поллард-Брент ро
Устанавливается так:
install(Z_pollardbrent,GLL)
Запускаем:
Код:
? Z_pollardbrent(15621763*614813194568884725330347254101670326647553073,10^2,1)
time = 3 ms.
%4 = [15621763, 614813194568884725330347254101670326647553073]
?
то есть такая особенность. Интерпретатор, если какая-то функция возвращает NULL, выпадает в ошибку.
Чтобы этого не происходило, нужна вспомогательная функция
isNULL(x=0)=xИ запускать через неё, т.е.
Код:
? isNULL(Z_pollardbrent(9604466014828004353430781511277071747020658636327699,10,1))
time = 1 ms.
%41 = 0
?
Тут 10 итераций не хватило, поэтому
Z_pollardbrent возвращает NULL, а
isNULL() конвертирует NULL уже обычный 0 (ноль).
Ну или объявить ещё одну, уже обёрнутую функцию, например
Код:
? isNULL(x=0)=x;
? my_pollard(n,iter,seed)=isNULL(Z_pollardbrent(n,iter,seed));
?
10 итераций мало, возвращаем ноль:
Код:
? my_pollard(9604466014828004353430781511277071747020658636327699,10,1)
time = 1 ms.
%56 = 0
?
50 итераций хватило, возвращаем два
делителя множителя:
Код:
? my_pollard(9604466014828004353430781511277071747020658636327699,50,1)
time = 5 ms.
%57 = [15621763, 614813194568884725330347254101670326647553073]
?