結果

問題 No.886 Direct
ユーザー maspy
提出日時 2020-03-28 10:32:19
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 232 ms / 4,000 ms
コード長 1,241 bytes
コンパイル時間 303 ms
コンパイル使用メモリ 82,216 KB
実行使用メモリ 79,344 KB
最終ジャッジ日時 2025-01-02 10:51:46
合計ジャッジ時間 5,522 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 32
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#!/usr/bin/ python3.8
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
from functools import lru_cache
H, W = map(int, readline().split())
if H < W:
H, W = W, H
def S1(n):
return n * (n + 1) // 2
def S2(n):
return n * (n + 1) * (2 * n + 1) // 6
@lru_cache(None)
def f(H, W):
""" 1 <= x <= H, 1 <= y <= W, gcd(x,y) = 1 sum 1, sum x, sum y, sum xy"""
SH = H * (H + 1) // 2
SW = W * (W + 1) // 2
sum_1 = H * W
sum_x = SH * W
sum_y = SW * H
sum_xy = SH * SW
d = 2
while True:
Hd = H // d
Wd = W // d
if not Wd:
break
next_d = min(H // Hd, W // Wd) + 1
s1, sx, sy, sxy = f(Hd, Wd)
sum_1 -= s1 * (next_d - d)
sum_x -= sx * (S1(next_d - 1) - S1(d - 1))
sum_y -= sy * (S1(next_d - 1) - S1(d - 1))
sum_xy -= sxy * (S2(next_d - 1) - S2(d - 1))
d = next_d
return sum_1, sum_x, sum_y, sum_xy
sum_1, sum_x, sum_y, sum_xy = f(H, W)
answer = sum_1 * H * W - W * sum_x - H * sum_y + sum_xy
answer *= 2
#
answer += (W - 1) * H
answer += (H - 1) * W
MOD = 10 ** 9 + 7
print(answer % MOD)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0