結果
| 問題 | No.1844 Divisors Sum Sum |
| コンテスト | |
| ユーザー |
kokatsu
|
| 提出日時 | 2022-02-19 00:17:50 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 211 ms / 3,000 ms |
| コード長 | 721 bytes |
| 記録 | |
| コンパイル時間 | 2,050 ms |
| コンパイル使用メモリ | 205,640 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-06-22 14:22:38 |
| 合計ジャッジ時間 | 6,403 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 38 |
ソースコード
import std;
void main() {
int L;
readf("%d\n", L);
long res = 1;
foreach (_; 0 .. L) {
long P, e;
readf("%d %d\n", P, e);
long v = powMod(P-1, M-2);
long s = v * v;
if (s > M) s %= M;
long num = powMod(P, e+2);
ulong mul = (s * (num + M - P) + M - (v * (e + 1) % M));
if (mul > M) mul %= M;
res *= mul;
if (res > M) res %= M;
}
res.writeln;
}
enum long M = 10 ^^ 9 + 7;
long powMod(long x, long y) {
long res = 1;
while (y > 0) {
if (y & 1) {
res *= x;
if (res > M) res %= M;
}
x *= x;
if (x > M) x %= M;
y >>= 1;
}
return res;
}
kokatsu