結果
| 問題 | No.2847 Birthday Attack |
| コンテスト | |
| ユーザー |
detteiuu
|
| 提出日時 | 2026-08-15 01:38:39 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 321 ms / 3,000 ms |
| + 480µs | |
| コード長 | 1,053 bytes |
| 記録 | |
| コンパイル時間 | 242 ms |
| コンパイル使用メモリ | 95,592 KB |
| 実行使用メモリ | 84,608 KB |
| 最終ジャッジ日時 | 2026-08-15 01:38:46 |
| 合計ジャッジ時間 | 6,768 ms |
|
ジャッジサーバーID (参考情報) |
judge3_1 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 14 |
ソースコード
from math import gcd
INF = 1<<60
X, Y, MOD = map(int, input().split())
ans = 0
for i in range(1, INF):
if X < 1+i*2: break
rem = X-(1+i*2)
ans += Y*(rem+1)%MOD
ans %= MOD
for i in range(1, INF):
if Y < 1+i*2: break
rem = Y-(1+i*2)
ans += X*(rem+1)%MOD
ans %= MOD
X2, Y2 = (X+1)//2, (Y+1)//2
for m in range(1, 2001):
for n in range(1, m+1):
if gcd(m, n) == 1 and (m+n)%2 == 1:
a, b = m**2-n**2, 2*m*n
for i in range(1, INF):
c, d = a*i, b*i
if (X < 1+c*2 or Y < 1+d*2) and (X < 1+d*2 or Y < 1+c*2): break
if 1+c*2 <= X and 1+d*2 <= Y:
rem1 = X-(1+c*2)
rem2 = Y-(1+d*2)
ans += (rem1+1)*(rem2+1)%MOD*2%MOD
ans %= MOD
if 1+d*2 <= X and 1+c*2 <= Y:
rem1 = X-(1+d*2)
rem2 = Y-(1+c*2)
ans += (rem1+1)*(rem2+1)%MOD*2%MOD
ans %= MOD
ans *= 2
ans %= MOD
print(ans)
detteiuu