Karim Belabas on Sun, 18 May 2025 03:24:17 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: faster for very big primes and small exponents than "isprimepower()" |
Hi Hermann, for a fair comparison between your procedure and isprimepower, then you must include a primality proof (isprime) in the former. If the goal is to try and produce a base n given N = n^k without checking whether n is prime, then benchmark your procedure against ispower. Cheers, K.B. -- Pr. Karim Belabas, U. Bordeaux, Vice-président en charge du Numérique Institut de Mathématiques de Bordeaux UMR 5251 - (+33) 05 40 00 29 77 http://www.math.u-bordeaux.fr/~kbelabas/ * hermann@stamm-wilbrandt.de [2025-05-18 01:30]: > On mersenne forum I learned about a method to determine prime of prime > power: > https://www.mersenneforum.org/node/1055690?p=1077586#post1077586 > > After I simplified modulus and exponent, it can be proven with Euler's > theorem and induction that for odd prime powers N=p^n > 2^N ≡ 2 (mod N) > > This determines the prime for most odd prime powers: > lift(gcd(Mod(2,N)^N-2,N)) > > The exceptions are the two Wiefrich primes below 18*10^18 > (1093 and 3511), for which the square of the prime is returned. > > > PARI/GP "isprimepower(N,&r);return(r)" is nearly always much faster. > I created script to demonstrate that the gcd is faster for very big primes > and low exponents: > https://www.mersenneforum.org/node/1055690?p=1077586#post1077586 > > hermann@7950x:~$ gp -q < <(curl --no-progress-meter https://gist.githubusercontent.com/Hermann-SW/e4c2ccccd918e59766dc82b01993d41b/raw/e7480819b8a57331d84cd30f6a9f89650a44388e/measure.gp) > runtimes in milliseconds, with N=nextprime(base)^expo > > isprimepower(N,&r);return(r) > | 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| 13| 14| 15| > |---|---|---|---|---|---|---|---|---|---|---|---|---|---| > 10^ 10| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| > 10^ 20| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| > 10^ 30| 1| 1| 1| 1| 1| 1| 1| 1| 1| 1| 0| 0| 1| 1| > 10^ 40| 2| 2| 2| 2| 2| 2| 1| 2| 2| 2| 2| 2| 1| 1| > 10^ 50| 1| 0| 0| 1| 0| 0| 1| 0| 0| 1| 0| 0| 0| 0| > 10^ 60| 5| 5| 5| 5| 5| 5| 5| 4| 4| 5| 5| 5| 5| 5| > 10^ 70| 23| 23| 23| 23| 23| 23| 23| 23| 23| 23| 23| 23| 23| 23| > 10^ 80| 13| 13| 13| 13| 12| 12| 12| 12| 12| 12| 12| 12| 12| 12| > 10^ 90| 18| 18| 19| 19| 19| 19| 18| 18| 18| 17| 16| 16| 17| 16| > 10^100| 23| 23| 24| 24| 24| 24| 23| 23| 23| 23| 23| 23| 23| 24| > 10^110| 0| 1| 0| 1| 0| 1| 0| 1| 0| 1| 0| 1| 0| 1| > 10^120| 51| 50| 51| 51| 51| 51| 51| 51| 51| 51| 51| 51| 51| 51| > 10^130|109|109|108|108|109|109|108|109|108|109|108|108|109|109| > 10^140|115|115|115|115|115|115|115|115|114|115|115|115|115|115| > 10^150|136|136|136|136|136|136|136|136|136|136|136|136|136|136| > 10^160|217|216|216|216|216|216|216|216|216|216|216|217|216|216| > > lift(gcd(Mod(2,N)^N-2,N)) > | 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| 13| 14| 15| > |---|---|---|---|---|---|---|---|---|---|---|---|---|---| > 10^ 10| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| > 10^ 20| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| > 10^ 30| 0| 0| 0| 0| 0| 0| 1| 0| 0| 1| 0| 1| 0| 1| > 10^ 40| 0| 0| 0| 0| 0| 0| 1| 0| 1| 1| 1| 1| 2| 1| > 10^ 50| 0| 0| 0| 0| 1| 0| 1| 1| 1| 2| 1| 2| 3| 3| > 10^ 60| 0| 0| 0| 1| 0| 1| 1| 1| 2| 3| 3| 3| 5| 5| > 10^ 70| 0| 0| 0| 1| 1| 1| 1| 2| 2| 4| 4| 6| 6| 8| > 10^ 80| 0| 0| 0| 0| 1| 1| 3| 3| 4| 5| 6| 7| 9| 11| > 10^ 90| 0| 0| 0| 1| 2| 2| 3| 4| 5| 7| 8| 10| 12| 15| > 10^100| 0| 0| 1| 1| 1| 3| 4| 5| 6| 9| 11| 13| 16| 20| > 10^110| 0| 0| 0| 2| 2| 4| 5| 7| 8| 10| 14| 18| 21| 26| > 10^120| 0| 0| 1| 2| 3| 4| 6| 8| 11| 14| 18| 22| 28| 32| > 10^130| 0| 1| 1| 2| 4| 5| 8| 10| 13| 17| 22| 28| 33| 41| > 10^140| 0| 1| 2| 3| 4| 7| 9| 13| 16| 21| 27| 33| 40| 49| > 10^150| 1| 1| 2| 3| 5| 8| 11| 15| 20| 26| 32| 39| 48| 55| > 10^160| 0| 1| 2| 4| 6| 9| 13| 17| 24| 31| 38| 47| 54| 58| > hermann@7950x:~$ > > > Regards, > > Hermann.