https://projecteuler.net/problem=45
とします。まずは簡単で、
両辺を8倍して1を足すと、
だから、
です。
は、
両辺を24倍して3を足すと、
とおくと、
となって、これはPell方程式を拡張したものです。
この解は、
と書けます。
import sys fn f() -> Int: fn mul(x: Tuple[Int, Int], y: Tuple[Int, Int]) -> Tuple[Int, Int]: var a = x.get[0, Int]() var b = x.get[1, Int]() var c = y.get[0, Int]() var d = y.get[1, Int]() return (a * c + b * d * 3, a * d + b * c) var counter = 0 var x = (1, 1) while True: x = mul(x, (2, 1)) var a = x.get[0, Int]() var b = x.get[1, Int]() if a % 6 == 5 and b % 4 == 3: counter += 1 if counter == 3: var l = (a + 1) // 6 return l * (3 * l - 1) // 2 fn main(): print(f())