Lucas-Lehmer test: Difference between revisions
Content deleted Content added
→{{header|Scala}}: Parallel processing since 2.8 made it possible for quicker processing. |
|||
Line 1,266: | Line 1,266: | ||
=={{header|Ruby}}== |
=={{header|Ruby}}== |
||
<lang ruby>def is_prime ( p ) |
<lang ruby>def is_prime ( p ) |
||
if p == 2 |
return true if p == 2 |
||
return false if p <= 1 || p.even? |
|||
return true |
|||
⚫ | |||
elsif p <= 1 || p % 2 == 0 |
|||
return false |
return false if p % i == 0 |
||
else |
|||
⚫ | |||
⚫ | |||
return false |
|||
end |
|||
end |
|||
return true |
|||
end |
end |
||
true |
|||
end |
end |
||
def is_mersenne_prime ( p ) |
def is_mersenne_prime ( p ) |
||
if p == 2 |
return true if p == 2 |
||
⚫ | |||
return true |
|||
s = 4 |
|||
(p-2).times { s = (s ** 2 - 2) % m_p } |
|||
s == 0 |
|||
(p-2).times do |
|||
s = (s ** 2 - 2) % m_p |
|||
end |
|||
return s == 0 |
|||
end |
|||
end |
end |
||
Line 1,298: | Line 1,287: | ||
upb_count = 45 # find 45 mprimes if int was given enough bits # |
upb_count = 45 # find 45 mprimes if int was given enough bits # |
||
puts " Finding Mersenne primes in M[2..%d]:"%upb_prime |
puts " Finding Mersenne primes in M[2..%d]:" % upb_prime |
||
count = 0 |
count = 0 |
||
for p in 2..upb_prime |
for p in 2..upb_prime |
||
if is_prime(p) && is_mersenne_prime(p) |
if is_prime(p) && is_mersenne_prime(p) |
||
print "M%d "%p |
print "M%d " % p |
||
count += 1 |
count += 1 |
||
end |
end |
||
if count >= upb_count |
break if count >= upb_count |
||
break |
|||
end |
|||
end |
end |
||
puts</lang> |
puts</lang> |
||
{{out}} |
|||
Output: |
|||
<pre> Finding Mersenne primes in M[2..33218]: |
<pre> Finding Mersenne primes in M[2..33218]: |
||
M2 M3 M5 M7 M13 M17 M19 M31 M61 M89 M107 M127 M521 M607 M1279 M2203 M2281 M3217 M4253 M4423 M9689 M9941 M11213 M19937 M21701 M23209</pre> |
M2 M3 M5 M7 M13 M17 M19 M31 M61 M89 M107 M127 M521 M607 M1279 M2203 M2281 M3217 M4253 M4423 M9689 M9941 M11213 M19937 M21701 M23209</pre> |