結果
問題 | No.2125 Inverse Sum |
ユーザー |
![]() |
提出日時 | 2025-03-20 20:36:43 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 196 ms / 2,000 ms |
コード長 | 1,366 bytes |
コンパイル時間 | 214 ms |
コンパイル使用メモリ | 82,840 KB |
実行使用メモリ | 82,912 KB |
最終ジャッジ日時 | 2025-03-20 20:37:43 |
合計ジャッジ時間 | 3,226 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
import math def factorize(n): factors = {} while n % 2 == 0: factors[2] = factors.get(2, 0) + 1 n = n // 2 i = 3 max_i = math.isqrt(n) + 1 while i <= max_i and n > 1: while n % i == 0: factors[i] = factors.get(i, 0) + 1 n = n // i max_i = math.isqrt(n) + 1 i += 2 if n > 1: factors[n] = 1 return factors def generate_divisors(factors): divisors = [1] for prime in sorted(factors.keys()): exp = factors[prime] current_powers = [prime**i for i in range(exp + 1)] temp = [] for d in divisors: for power in current_powers: temp.append(d * power) divisors = temp return divisors def main(): P, Q = map(int, input().split()) q_factors = factorize(Q) q_squared_factors = {p: 2 * e for p, e in q_factors.items()} divisors = generate_divisors(q_squared_factors) answers = [] q_squared = Q * Q for d in divisors: e = q_squared // d if (d + Q) % P != 0 or (e + Q) % P != 0: continue x = (d + Q) // P y = (e + Q) // P if x > 0 and y > 0: answers.append((x, y)) answers.sort() print(len(answers)) for pair in answers: print(pair[0], pair[1]) if __name__ == "__main__": main()