Cod sursa(job #1626734)

Utilizator VAIonescuIonescu Vlad-Andrei VAIonescu Data 3 martie 2016 11:35:25
Problema Suma divizorilor Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
#include <cmath>
using namespace std;
int genPut(int d, long long e) {
    int p = 1;
    while(e) {
        if(e & 1)
            p = (1LL * p * d) % 9901;
        d = (1LL * d * d) % 9901;
        e >>= 1;
    }
    return p;
}
int main() {
    freopen("sumdiv.in", "r", stdin);
    freopen("sumdiv.out", "w", stdout);
    int a, b;
    int sol = 1, e;
    scanf("%d%d", &a, &b);
    int lim=(int)sqrt((double)a);
    for(int i = 2; i <= lim; i++) {
        if(a % i == 0) {
            e = 0;
            while(a % i == 0) {
                e++;
                a /= i;
            }
            sol = 1LL * sol * genPut(i, 1LL * e * b + 1) - 1 / (i - 1) % 9901;
        }
    }
    if(a > 1) {
        sol = 1LL * sol * genPut(a, b + 1) - 1 / (a - 1) % 9901;
    }
    printf("%d", sol % 9901);
    return 0;
}