結果
| 問題 | 
                            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