Aurel Page on Tue, 24 Feb 2026 00:24:46 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Why does factorint() take 128ms for 1853 decimal digit prime, while isprime() takes 16:45min/2min cpu/real time?


Dear Hermann,

That is because by default, factor does not prove that the factors are prime. They are only guaranteed to be pseudoprimes.

? p = randomprime(10^300);
? ispseudoprime(p);
cpu time = 6 ms, real time = 6 ms.
? factor(p);
cpu time = 8 ms, real time = 11 ms.
? isprime(p)
cpu time = 2,414 ms, real time = 1,124 ms.

You can use default(factor_proven, 1) to change this behaviour.

Best,
Aurel

On 2/23/26 22:25, hermann@stamm-wilbrandt.de wrote:
Gist 3710.gp https://gist.github.com/Hermann-SW/ffc3d818a2867e9e40bdeeedc022bfea sets 3710 decimal digits Carmichael number N=P*Q*R for primes P, Q and R.

Why does isprime(R) take so much longer than factorint(R), which identifies R as squarefree and having single prime factor, which means R is prime?

hermann@7950x:~$ gp -q 3710.gp
? #
   timer = 1 (on)
? F=factorint(R);
cpu time = 128 ms, real time = 128 ms.
? #digits(R)
1853
? isprime(R)
cpu time = 16min, 44,590 ms, real time = 1min, 59,408 ms.
1
? #F~[,1]
1
? #F[1,2]
1
? F[1,1]==R
1
? isprime(Q)
cpu time = 79 ms, real time = 79 ms.
1
? isprime(P)
cpu time = 79 ms, real time = 79 ms.
1
? kronecker(5,N)
-1
? N==P*Q*R
1
? lift(Mod(5,N)^(N-1))
cpu time = 223 ms, real time = 223 ms.
1
?


Regards,

Hermann.