Giuga numbers: Difference between revisions

m
m (→‎{{header|Free Pascal}}: n is now alsways even.remove this check.Now 6.th guiga number found < 9 min.)
Line 132:
1722
66198
</pre>
=== Ad hoc faster version ===
<lang ruby>using Primes
 
isGiuga(n) = all(f -> f != n && rem(n ÷ f - 1, f) == 0, factor(Vector, n))
 
function getgiugas(numberwanted, verbose = true)
n, found, nfound = 6, Int[], 0
starttime = time()
while nfound < numberwanted
if n % 5 == 0 || n % 7 == 0 || n % 11 == 0
for (p, e) in eachfactor(n)
(e != 1 || rem(n ÷ p - 1, p)) != 0 && @goto nextnumber
end
verbose && println(n, " (elapsed: ", time() - starttime, ")")
push!(found, n)
nfound += 1
end
@label nextnumber
n += 6 # all mult of 6
end
return found
end
 
@time getgiugas(2, false)
@time getgiugas(6)
</lang>{{out}}
30 (elapsed: 0.0)
858 (elapsed: 0.0)
1722 (elapsed: 0.0)
66198 (elapsed: 0.0009999275207519531)
2214408306 (elapsed: 18.97099995613098)
24423128562 (elapsed: 432.06500005722046)
432.066249 seconds (235 allocations: 12.523 KiB)
</pre>
 
4,107

edits