Cod sursa(job #2091996)

Utilizator zdavid112zIon David-Gabriel zdavid112z Data 20 decembrie 2017 19:32:14
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>
#define MOD 9901

using namespace std;
typedef long long ll;

ll a, b, s = 1;

ll mpow(ll x, ll p)
{
    ll r = 1;
    while(p)
    {
        if(p & 1)
            r = (r * x) % MOD;
        x = (x * x) % MOD;
        p >>= 1;
    }
    return r;
}

void add(ll d, ll p)
{
    d %= MOD; p *= b;
    if(d == 0) return;
    if(d == 1)
    {
        s = (s * (p + 1)) % MOD;
        return;
    }
    ll aux = ((mpow(d, p + 1) - 1) * mpow(d - 1, MOD - 2)) % MOD;
    s = (s * aux) % MOD;
}

int main()
{
    freopen("sumdiv.in", "r", stdin);
    freopen("sumdiv.out", "w", stdout);
    scanf("%lld%lld", &a, &b);
    for(int i = 2; i * i <= a; i++)
    {
        int p = 0;
        while(a % i == 0)
        {
            p++;
            a /= i;
        }
        if(!p) continue;
        add(i, p);
    }
    if(a > 1) add(a, 1);
    printf("%lld", s);
    return 0;
}