Learn R Programming

gmp (version 0.7-5)

isprime: 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

isprime(n, reps = 40)  

Value

0

\(n\) is not prime

1

\(n\) is probably prime

2

\(n\) is prime

Arguments

n

integer number, to be tested.

reps

integer number of primality testing repeats.

Author

Antoine Lucas

Details

This function does some trial divisions, then some Miller-Rabin 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”.

References

The GNU MP Library, see https://gmplib.org

See Also

nextprime, factorize.

Note that for “small” \(n\), which means something like \(n < 10'000'000\), non-probabilistic methods (such as factorize()) are fast enough.

Examples

Run this code
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]

Run the code above in your browser using DataLab