結果
| 問題 |
No.1276 3枚のカード
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-09 21:04:37 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 671 ms / 2,000 ms |
| コード長 | 1,435 bytes |
| コンパイル時間 | 462 ms |
| コンパイル使用メモリ | 82,240 KB |
| 実行使用メモリ | 76,564 KB |
| 最終ジャッジ日時 | 2025-04-09 21:06:35 |
| 合計ジャッジ時間 | 22,628 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 61 |
ソースコード
MOD = 10**9 + 7
def sum_d(n):
if n <= 0:
return 0
m = int(n**0.5)
res = 0
for i in range(1, m + 1):
res += n // i
res = 2 * res - m * m
return res
def main():
N = int(input().strip())
M = N // 2
if M < 1:
print(0)
return
ans = 0
current_k = N // 2 # Start with the largest possible k
while current_k >= 2:
# Calculate the B range for current_k
lower = (N // (current_k + 1)) + 1
upper = N // current_k
# Adjust the valid B range
L = max(lower, 2)
R = min(upper, M)
if L > R:
current_k -= 1
continue
cnt = R - L + 1
# Calculate term1: (k-1) * (N+1 -k) * cnt
k = current_k
term1 = (k - 1) * ((N + 1 - k) % MOD) % MOD
term1 = term1 * cnt % MOD
# Calculate term2: (k-1) * sum_d(B) from L to R
sum_r = sum_d(R)
sum_l_minus_1 = sum_d(L - 1)
sum_d_B = (sum_r - sum_l_minus_1) % MOD
term2 = (k - 1) * sum_d_B % MOD
# Update the answer
ans = (ans + term1 - term2) % MOD
ans = (ans + MOD) % MOD # Ensure non-negative
# Determine next_k to jump
next_k = N // (R + 1) if (R + 1) <= N else 0
if next_k >= current_k:
current_k -= 1
else:
current_k = next_k
print(ans % MOD)
if __name__ == "__main__":
main()
lam6er