2020年12月17日木曜日

素数の計算(4)

 素数の計算(3)の続き

というわけで,JuliaのPrimes.jlでは,primes()を使って探す方が,prime()を計算するより早いということがわかってしまった。1億番目の素数を求める場合,prime()単体では,primes()を用いた場合より35倍遅い。なんだか・・・。なお,素数計数関数 $n = \pi(x)$の逆関数としては,前回のものをちょっと修整して,$x(n) = 10^{1.05 \log(n) + 1.0}$を用いた。

using Primes

function testp(n,k)
  if(k==1)
    m=Int64(floor(10^(1.05*n+1.0)))
    p=primes(m)
    println(p[10^n])
  elseif(k==2)
    println(prime(10^n))
  end
end

for i in 6:8
  @time testp(i,1)
end

for i in 6:8
  @time testp(i,2)
end


15485863
0.067474 seconds (43 allocations: 14.778 MiB)
179424673
0.915835 seconds (163 allocations: 151.275 MiB, 0.35% gc time)
2038074743
12.159200 seconds (163 allocations: 1.536 GiB, 0.10% gc time)
15485863
2.350876 seconds (2.53 M allocations: 38.664 MiB)
179424673
33.536126 seconds (29.35 M allocations: 447.880 MiB)
2038074743
426.317886 seconds (333.40 M allocations: 4.968 GiB, 0.12% gc time)

0 件のコメント: