結果
問題 |
No.3301 Make Right Triangle
|
ユーザー |
|
提出日時 | 2025-10-05 16:30:04 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,866 bytes |
コンパイル時間 | 293 ms |
コンパイル使用メモリ | 82,364 KB |
実行使用メモリ | 77,932 KB |
最終ジャッジ日時 | 2025-10-05 16:30:32 |
合計ジャッジ時間 | 7,082 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 1 |
other | TLE * 1 -- * 8 |
ソースコード
# 自作ライブラリ # https://github.com/takumi-okamoto/competitive-programming-public/tree/main/mylib import sys import math # sys.setrecursionlimit(10**8) def debug(*args): print(*args, file=sys.stderr) def solve(l): if l in [3, 4, 5]: return "3 4 5" # a = k(m**2-n**2) # b = 2kmn # c = k(m**2 + n**2) # gcd(m, n) = 1 m = 1 while m * m < l: # lが素数の場合 # m ** 2 + n ** 2 = l n2 = l - m * m n1 = int(n2**0.5) for d in [-1, 0, 1]: n = n1 + d if n * n == n2: break else: n = None if n is not None: g = math.gcd(m, n) k = g**2 m = m // g n = n // g if m > n: return f"{k*(m**2 - n**2)} {2*k*m*n} {k*(m**2+n**2)}" m += 1 n = 1 while 2 * n * n <= l: if l % (2 * n) == 0: m = l // (2 * n) if m > n: g = math.gcd(m, n) m //= g n //= g k = g * g return f"{k*(m**2 - n**2)} {2*k*m*n} {k*(m**2+n**2)}" n += 1 d = 1 while d * d <= l: if l % d == 0: if (l // d - d) % 2 == 0: n = (l // d - d) // 2 m = 2 * n + d if m > n: g = math.gcd(m, n) m //= g n //= g k = g * g return f"{k*(m**2 - n**2)} {2*k*m*n} {k*(m**2+n**2)}" d += 1 def main(): t = int(input()) ans = [] for _ in range(t): ans.append(solve(int(input()))) print(*ans, sep="\n") # for abc in ans: # a, b, c = map(int, abc.split()) # assert a**2 + b**2 == c**2 if __name__ == "__main__": main()