Determine if number is (very probably) prime
Description
Determine whether the number n is prime or not, with three possible answers:
 2:
n is prime,
 1:
n is probably prime (without beeing certain),
 0:
n is composite.
Usage
1  isprime(n, reps = 40)

Arguments
n 
integer number, to be tested. 
reps 
integer number of primality testing repeats. 
Details
This function does some trial divisions, then some MillerRabin
probabilistic primary tests. reps
controls how many such tests are
done, 5 to 10 is already a resonable number. More will reduce the chances
of a composite being returned as “probably prime”.
Value
0 
n is not prime 
1 
n is probably prime 
2 
n is prime 
Author(s)
Antoine Lucas
References
The GNU MP Library, see http://gmplib.org
See Also
nextprime
, factorize
.
Note that for “small” n, which means something like
n < 10'000'000, nonprobabilistic methods (such as
factorize()
) are fast enough. For example,
primes
in package sfsmisc.
Examples
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26  isprime(210)
isprime(71)
# All primes numbers from 1 to 100
t < isprime(1:99)
(1:99)[t > 0]
table(isprime(1:10000))# 0 and 2 : surely prime or not prime
primes < function(n) {
## all primes <= n
stopifnot(length(n) == 1, n <= 1e7) # be reasonable
p < c(2L, as.integer(seq(3, n, by=2)))
p[isprime(p) > 0]
}
## quite quickly, but for these small numbers
## still slower than e.g., sfsmisc::primes()
system.time(p100k < primes(100000))
## The first couple of Mersenne primes:
p.exp < primes(1000)
Mers < as.bigz(2) ^ p.exp  1
isp.M < sapply(seq_along(Mers), function(i) isprime(Mers[i], reps=256))
cbind(p.exp, isp.M)[isp.M > 0,]
Mers[isp.M > 0]
