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


MojoでProject Euler 100

https://projecteuler.net/problem=100

トータルのディスクの数をn、青いディスクの数をmとすると、
 \displaystyle \frac{m}{n}\frac{m-1}{n-1} = \frac{1}{2}
これを変形して、
 (2n-1)^2 - 2(2m-1) = -1
これはPell方程式です。解 a_k, b_kは、
 a_k + b_k\sqrt{2} = (1 + \sqrt{2})^{2k+1}\ (k \ge 0)
と書けます。

import sys


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

# x^2 - 2y^2 = -1
fn next_solution(x: Int, y: Int) -> Tuple[Int, Int]:
    return (x*3 + y*4, x*2 + y*3)

fn f(N: Int) -> Int:
    # (2n-1)^2 - 2(2m-1)^2 = -1
    var x = 1
    var y = 1
    while x <= N*2 + 1:
        var t = next_solution(x, y)
        x = t.get[0, Int]()
        y = t.get[1, Int]()
    return (y + 1) // 2

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



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

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