結果
| 問題 |
No.1844 Divisors Sum Sum
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-03-15 15:39:51 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 566 ms / 3,000 ms |
| コード長 | 1,170 bytes |
| コンパイル時間 | 276 ms |
| コンパイル使用メモリ | 81,412 KB |
| 実行使用メモリ | 95,384 KB |
| 最終ジャッジ日時 | 2024-09-18 08:46:20 |
| 合計ジャッジ時間 | 11,618 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 38 |
ソースコード
from collections import Counter
from math import floor
MOD = int(1e9 + 7)
def getPrimeFactors(n: int) -> Counter:
"""返回 n 的所有质数因子"""
res = Counter()
upper = floor(n**0.5) + 1
for i in range(2, upper):
while n % i == 0:
res[i] += 1
n //= i
# 注意考虑本身
if n > 1:
res[n] += 1
return res
def sumOfFactors(counter: "Counter[int]") -> int:
"""返回所有约数之和, counter 为这个数的所有质数因子分解."""
res = 1
for p, count in counter.items():
inv = pow(p - 1, MOD - 2, MOD)
tmp = inv * (inv * (pow(p, count + 2, MOD) - 1) - (count + 2)) % MOD
res = res * tmp % MOD
return res
def countOfFactors(counter: "Counter[int]") -> int:
"""返回所有约数个数, counter 为这个数的所有质数因子分解."""
res = 1
for count in counter.values():
res *= count + 1
res %= MOD
return res
if __name__ == "__main__":
n = int(input())
counter = Counter()
for _ in range(n):
p, c = map(int, input().split())
counter[p] += c
print(sumOfFactors(counter))