MojoでProject Euler 3

https://projecteuler.net/problem=3

Pythonならこんな風に書きたいところです。

from itertools import count
import sys

def f(n: int) -> int:
    for p in count(2):
        if p * p > n:
            return n
        elif n % p == 0:
            return f(n//p)
    return n

N = int(sys.argv[1])
print(f(N))

Mojoにはcountが無いので、rangeで代用しました。

import sys

def f(n: Int) -> Int:
    for p in range(2, n+1):
        if p * p > n:
            return n
        elif n % p == 0:
            return f(n//p)
    return n

fn main():
    let args = sys.argv()
    try:
        let N = atol(args[1])
        print(f(N))
    except:
        pass