JuliaでProject Euler(12)

Problem 12

https://projecteuler.net/problem=12

本当は速い方法があるが、ここでは愚直に順番に約数の個数を調べていく。

function factorize_naive(n)
    fs = []
    for d in Iterators.countfrom(2)
        if d*d > n
            break
        elseif n%d == 0
            e = 1
            n = div(n, d)
            while n%d == 0
                e += 1
                n = div(n, d)
            end
            push!(fs, Pair(d, e))
        end
    end
    if n != 1
        push!(fs, Pair(n, 1))
    end
    return fs
end

function num_divisors(fs)
    return reduce((x, f) -> x*(f.second+1), fs, init=1)
end

function T(n)
    return div(n*(n+1), 2)
end

function e012(N)
    for n in Iterators.countfrom(1)
        fs = factorize_naive(T(n))
        num = num_divisors(fs)
        if num > N
            return T(n)
        end
    end
end

N = parse(Int, ARGS[1])
println(e012(N))

素因数分解の結果をArray{Pair{Int64,Int64}}で表している。Pairの要素へのアクセスは、first, secondを用いる。
なお、初期化で型を指定していないが、除算に時間がかかっているためあまり影響がない。