p0045_s0.py

problem 45 · 26 lines

#!/usr/bin/env python3.14
# -*- coding: utf-8 -*-
""" Solution to Euler Problem 45: Triangular, Pentagonal, and Hexagonal [Level 1]. """
from __future__ import annotations

from solver.runners import runner


@runner.main
def solve(*args: str) -> str:
    """Scan triangular numbers T(n) from a given index, keeping those whose inverse pentagonal and
    triangular discriminants are perfect squares (root == 5 mod 6 and 3 mod 4); O(k) candidates."""
    n = runner.parse_int(args[0])

    while n := (n + 1):
        triangular_number = n * (n + 1) // 2
        if (1 + 24 * triangular_number) ** 0.5 % 6 == 5.0:
            if (1 + 8 * triangular_number) ** 0.5 % 4 == 3.0:
                return str(triangular_number)
    else:
        raise ValueError("No solution found")


if __name__ == "__main__":
    raise SystemExit(solve())