以下の内容はhttps://inamori.hateblo.jp/entry/2025/01/15/195118より取得しました。


MojoでProject Euler 91

https://projecteuler.net/problem=91

直角がどの点か決めて、Qが直角ならQPがOQに直交するようにPを定めます。
速くなりそうな気もしますが、難しいですね。

from math import sqrt
import sys


#################### library ####################

fn gcd(n: Int, m: Int) -> Int:
    if m == 0:
        return n
    else:
        return gcd(m, n % m)


#################### process ####################

fn f(L: Int) -> Int:
    var num_triangles = L * L   # 原点が直角
    num_triangles += L * L * 2  # Qx = 0 or Qy = 0
    
    for Qx in range(1, L+1):
        for Qy in range(1, L+1):
            var d = gcd(Qx, Qy)
            var vx = -Qy // d
            var vy = Qx // d
            num_triangles += min(Qx // (-vx), (L-Qy) // vy)
            num_triangles += min((L-Qx) // (-vx), Qy // vy)
    
    return num_triangles

fn main() raises:
    var args = sys.argv()
    var L = atol(args[1])
    print(f(L))



以上の内容はhttps://inamori.hateblo.jp/entry/2025/01/15/195118より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14