結果
問題 | No.1844 Divisors Sum Sum |
ユーザー |
![]() |
提出日時 | 2025-03-20 21:11:50 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 654 ms / 3,000 ms |
コード長 | 1,508 bytes |
コンパイル時間 | 290 ms |
コンパイル使用メモリ | 82,548 KB |
実行使用メモリ | 131,848 KB |
最終ジャッジ日時 | 2025-03-20 21:12:56 |
合計ジャッジ時間 | 12,097 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 38 |
ソースコード
MOD = 10**9 + 7inv2 = 500000004 # Modular inverse of 2 modulo MODdef main():import sysinput = sys.stdin.read().split()ptr = 0L = int(input[ptr])ptr += 1ans = 1for _ in range(L):P = int(input[ptr])e = int(input[ptr + 1])ptr += 2P_mod = P % MODif P_mod == 1:s1 = (e + 1) % MODs2 = (e % MOD) * ((e + 1) % MOD) % MODs2 = s2 * inv2 % MODti = (s1 * s1 - s2) % MODelse:pow_e_plus_1 = pow(P_mod, e + 1, MOD)numerator_s1 = (pow_e_plus_1 - 1) % MODden_s1 = (P_mod - 1) % MODif den_s1 == 0:s1 = (e + 1) % MODelse:inv_den_s1 = pow(den_s1, MOD - 2, MOD)s1 = numerator_s1 * inv_den_s1 % MODpow_e = pow(P_mod, e, MOD)term2 = ((e + 1) % MOD) * pow_e % MODterm3 = (e % MOD) * pow_e_plus_1 % MODnumerator_s2 = (1 - term2 + term3) % MODnumerator_s2 = numerator_s2 * P_mod % MODden_sq = ((P_mod - 1) % MOD) ** 2 % MODif den_sq == 0:s2 = 0 # Not possible in else clauseelse:inv_den_s2 = pow(den_sq, MOD - 2, MOD)s2 = numerator_s2 * inv_den_s2 % MODti = (( (e + 1) % MOD ) * s1 - s2) % MODti = ti % MODans = ans * ti % MODprint(ans % MOD)if __name__ == '__main__':main()