Cod sursa(job #2664393)

Utilizator 2016Teo@Balan 2016 Data 28 octombrie 2020 16:20:05
Problema Suma divizorilor Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;
#define f1 "sumdiv.in"
#define f2 "sumdiv.out"
ifstream in(f1);
ofstream out(f2);
#define MOD 9901
long long fastexp(long long n, long long p) {
    long long a = 1;
    while(p) {
        if(p % 2)
            a = (1LL * a * n) % MOD;
        n = (1LL * n * n) % MOD;
        p /= 2;
    }
    return a + MOD;
}
int main() {
    int a, b, sum = 1, d = 2, p;
    in >> a >> b;
    while(d * d <= a) {
        p = 0;
        if(a % d == 0) {
            while(a % d == 0) {
                a /= d;
                p++;
            }
            sum = (1LL * sum * (fastexp(d, p * b + 1) - 1) * fastexp(d - 1, MOD - 2)) % MOD;
        }
        d++;
    }
    if(a)
        sum = (1LL * sum * (fastexp(a, b + 1) - 1) * fastexp(a - 1, MOD - 2)) % MOD;
    out << sum;
    return 0;
}