もっと詳しく

みなさんお久しぶりです。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.

The post Juliaを試してみた first appeared on FascodeNetwork Blog.