написал аккуратную программку, обрабатывающую несвободные от квадратов и четные числа отдельно. Она конечно для огромных
не годится, использует факторизацию для детектирования этих случаев
Код:
? ?issquarefree
issquarefree(x): true(1) if x is squarefree, false(0) if not.
? 123%2==0
0
Т.е. и то и другое можно проверить без полной факторизации.
Оно даже чуточку побыстрее:
Код:
? forstep(x=1,1e8,2,factor(x));
time = 1min, 18,782 ms.
? forstep(x=1,1e8,2,issquarefree(x));
time = 1min, 9,139 ms.
Если же нужна и факторизация тоже (например для исключения простого в степени), то установив параметр
default(factor_add_primes,1); можно сохранить все большие (больше
) найденные простые и они будут автоматически проверяться при вызове любой функции про факторизацию. Очистить список больших простых можно командой
removeprimes(addprimes());.