2020年12月13日日曜日

素数の計算(2)

素数の計算(1)の続き

Juliaの素数計算が遅い原因を絞り込みたい。python3とJuliaを比べると,素数判定のisprimeや範囲指定素数のprimerangeやprimesではともに高速であるが,順序指定素数のprimeにおいて,juliaはpythonの200倍程度時間がかかっている。しかし,同じ範囲の素数は,素数判定や範囲指定素数では高速に計算できているので,juliaのprimeのコードがややこしいことになっているのが問題だと思われる。

python3では, 
- - - - - - - - - - 
from sympy import *
import time
start_time=time.time()
n=179424673
m=10**7
for p in range(n,n+50):
    if isprime(p)==1:
        print(p)
lap1_time=time.time()
print(list(primerange(n, n+50)))
lap2_time=time.time()
for i in range(m,m+4):
    print(prime(i))
end_time=time.time()
print(lap1_time-start_time)
print(lap2_time-lap1_time)
print(end_time-lap2_time)

- - - - - - - - - - 
179424673
179424691
179424697
179424719
[179424673, 179424691, 179424697, 179424719]
179424673
179424691
179424697
179424719
0.0050160884857177734
0.002671957015991211
0.5041019916534424

julia1.5.1では 
- - - - - - - - - - 
using Primes

function test1(n)
  for p in n:n+50
    if(isprime(p))
      println(p)
    end
  end
end

function test2(n)
  println(primes(n,n+50))
end

function test3(n)
  for p in n:n+3
    println(prime(p))
  end
end

@time test1(179424673)
@time test2(179424673)
@time test3(10^7)

- - - - - - - - - - 
179424673
179424691
179424697
179424719
0.000310 seconds (146 allocations: 3.500 KiB)
[179424673, 179424691, 179424697, 179424719]
0.000521 seconds (207 allocations: 8.109 KiB)
179424673
179424691
179424697
179424719
128.789228 seconds (117.41 M allocations: 1.750 GiB, 0.34% gc time)


0 件のコメント: