Fast primality test for small numbers

  • Context: Undergrad 
  • Thread starter Thread starter CRGreathouse
  • Start date Start date
  • Tags Tags
    Numbers Test
Click For Summary
SUMMARY

The discussion focuses on finding a faster primality test for 64-bit numbers than the existing Pari library. The user is currently utilizing Pari but is exploring alternatives, including Mathematica, for speed comparisons. The original Pari code demonstrates a custom function for primality testing, while the Mathematica version shows a significant performance lag, taking three times longer than Pari. The user notes that incorporating the ispseudoprime function in Pari could enhance its performance further.

PREREQUISITES
  • Familiarity with primality testing algorithms
  • Understanding of the Pari/GP library
  • Basic knowledge of Mathematica programming
  • Experience with performance benchmarking in computational tasks
NEXT STEPS
  • Explore alternative libraries for primality testing, such as GMP or FLINT
  • Investigate the implementation of ispseudoprime in Pari for optimization
  • Learn about advanced techniques in Mathematica for performance improvement
  • Research parallel computing methods to speed up primality tests
USEFUL FOR

Mathematicians, computer scientists, and software developers focused on number theory and performance optimization in primality testing algorithms.

CRGreathouse
Science Advisor
Homework Helper
Messages
2,832
Reaction score
0
Beating Pari: fast primality test for small numbers

I'm looking for a library (or just a program) with a fast primality test for 64-bit numbers. In particular I'd like something that's faster than Pari which I'm currently using. I do need it to be programmable, of course, since billions of tests need to be done.

Any ideas? Or is Pari essentially as fast as I can get?

I'm going to try to port my program to Mathematica to do a speed comparison, but in past tests Pari beats Mathematica soundly in number theory.
 
Last edited:
Physics news on Phys.org
Original Pari code:
Code:
aa=vector(90,n,2^n);bb=vector(90,n,3*2^n);v=sumset(aa,bb);v=vector(5000,i,v[i]);
counter(n)=my(i=0);while(v[i++]<n,if(isprime(n-v[i]),return(0)));1
forstep(n=7,1e6,2,if(counter(n),print(n)))
This actually uses my custom function sumset, but its function is pretty clear from context.

Here's my Mathematica version:
Code:
v=Part[Sort[Flatten[Table[2^i+3*2^j,{i,90},{j,90}]]],1;;5000];
counter(n_):=Block[{i=0},
	While[v[[i++]]<n,
		If[PrimeQ[n-v[[i]]],Return[0]]
	];
	Return[1]
]
Timing[For[i=7,i<=10^6,i+=2,If[counter[i]!=0,Print[i]]]]

The Mathematica code takes about three times as long as the Pari code. The Pari code could be yet faster with ispseudoprime, of course...
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 2 ·
Replies
2
Views
7K
  • · Replies 16 ·
Replies
16
Views
3K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 30 ·
2
Replies
30
Views
7K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 11 ·
Replies
11
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 0 ·
Replies
0
Views
2K
  • · Replies 21 ·
Replies
21
Views
5K