MojoでProject Euler 45

https://projecteuler.net/problem=45

 T_k = P_l = H_mとします。まず T_k = H_mは簡単で、
 k(k+1)/2 = m(2m-1)
両辺を8倍して1を足すと、
 (2k+1)^2 = (4m-1)^2
 (2k+4m)(2k-4m+2) = 0
だから、
 k = 2m - 1
です。
 T_k = P_lは、
両辺を24倍して3を足すと、
 3(2k + 1)^2 = (6l-1)^2 + 2
 (6l-1)^2 - 3(2k+1)^2 = -2
 x \equiv 6l-1 \ \ y \equiv 2k+1とおくと、
 x^2 - 3y^2 = -2となって、これはPell方程式を拡張したものです。
この解は、
 x_n + y_n\sqrt{3} = (1+\sqrt{3})(2+\sqrt{3})^n
と書けます。

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())