RosettaCodeData/Task/Lucas-Lehmer-test/CoffeeScript/lucas-lehmer-test.coffee
2023-07-01 13:44:08 -04:00

20 lines
558 B
CoffeeScript

sorenson = require('sieve').primes # Sorenson's extensible sieve from task: Extensible Prime Number Generator
# Test if 2^n-1 is a Mersenne prime.
# assumes that the argument p is prime.
#
isMersennePrime = (p) ->
if p is 2 then yes
else
n = (1n << BigInt p) - 1n
s = 4n
s = (s*s - 2n) % n for _ in [1..p-2]
s is 0n
primes = sorenson()
mersennes = []
while (p = primes.next().value) < 3000
if isMersennePrime(p)
mersennes.push p
console.log "Some Mersenne primes: #{"M" + String p for p in mersennes}"