みなさんお久しぶりです。mk419です。今回は速いと噂のJuliaを試してみたいと思います。
テスト用のコード
最大値(stop)までの素数を出力するプログラムです。なんも最適化してません。
Python
#!/usr/bin/env python3
import sys
def get_prime_numbers(stop: int) -> None:
prime_numbers: list[int] = []
for number in range(2, stop + 1):
for prime_number in prime_numbers:
if number % prime_number == 0:
break
else:
print(number)
prime_numbers.append(number)
if __name__ == "__main__":
get_prime_numbers(int(sys.argv[1]))
Nim
import os
import strutils
proc getPrimeNumbers(stop: int) =
var
prime_numbers: seq[int] = @[]
continueFlag = false
for number in 2..stop:
for prime_number in prime_numbers:
if number mod prime_number == 0:
continueFlag = true
break
if continueFlag:
continueFlag = false
continue
echo number
prime_numbers.add(number)
if isMainModule:
getPrimeNumbers(commandLineParams()[0].parseInt())
Julia
function get_prime_numbers(stop::Int)
prime_numbers = []
continue_flag = false
for number = 2:stop
for prime_number in prime_numbers
if number % prime_number == 0
continue_flag = true
break
end
end
if continue_flag
continue_flag = false
continue
end
println(number)
push!(prime_numbers, number)
end
end
if abspath(PROGRAM_FILE) == @__FILE__
get_prime_numbers(parse(Int, ARGS[1]))
end
計測
最大値 | Python | Nim | Julia |
10 | 0.01s | 0.00s | 0.11s |
100 | 0.01s | 0.00s | 0.11s |
1000 | 0.01s | 0.00s | 0.11s |
10000 | 0.05s | 0.01s | 0.15s |
100000 | 1.98s | 0.47s | 2.98s |
1000000 | 127.65s | 29.87s | 407.82s |
なんか遅くね?
NimにはまだしもPythonの足元にも及ばないとは・・・
調べてみたところpush!
がPythonのappend
よりもかなり遅いらしいです。[]
をInt[]
に変えると良くなるそうです。
再計測
Juliaの名誉にかけて再計測
最大値 | Python | Nim | Julia |
10 | 0.01s | 0.00s | 0.10s |
100 | 0.01s | 0.00s | 0.10s |
1000 | 0.01s | 0.00s | 0.11s |
10000 | 0.05s | 0.01s | 0.11s |
100000 | 1.98s | 0.47s | 0.36s |
1000000 | 127.65s | 29.87s | 14.81s |
Pythonより、ずっとはやい!!
終わりに
Juliaが想像以上に速かったです。Nimに勝つとは思わなかったので正直驚いています。Int
のありなしでここまで変わるんですね・・・
そういえば共通テストまでもう三ヶ月きりましたね正直こんなことやってる場合じゃない()
GitHub - JuliaLang/julia: The Julia Programming Language
The Julia Programming Language. Contribute to JuliaLang/julia development by creating an account on GitHub.
コメント