23 lines
754 B
Text
23 lines
754 B
Text
with javascript_semantics
|
|
-- demo\rosetta\Perfect_numbers.exw (includes native and cheat versions)
|
|
include mpfr.e
|
|
atom t0 = time(), t1 = t0+1
|
|
integer maxprime = 4423, -- 19937 (rather slow)
|
|
lim = length(get_primes_le(maxprime))
|
|
mpz n = mpz_init(), m = mpz_init()
|
|
for i=1 to lim do
|
|
integer p = get_prime(i)
|
|
mpz_ui_pow_ui(n, 2, p)
|
|
mpz_sub_ui(n, n, 1)
|
|
if mpz_prime(n) then
|
|
mpz_ui_pow_ui(m, 2, p-1)
|
|
mpz_mul(n, n, m)
|
|
string ns = mpz_get_short_str(n,comma_fill:=true),
|
|
et = elapsed_short(time()-t0,5,"(%s)")
|
|
printf(1, "%d %s %s\n",{p,ns,et})
|
|
elsif time()>t1 then
|
|
progress("%d/%d (%.1f%%)\r",{p,maxprime,i/lim*100})
|
|
t1 = time()+1
|
|
end if
|
|
end for
|
|
?elapsed(time()-t0)
|