Cod sursa(job #1963415)

Utilizator Alex_AeleneiAlex Aelenei Ioan Alex_Aelenei Data 12 aprilie 2017 15:15:43
Problema Suma divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>
const int MOD = 9901;
int LgPut(int x, int b)
{
    int a = 1;
    while(b)
    {
        if(b%2) a=(1LL*a*x)%MOD;
        x=(1LL*x*x)%MOD;
        b/=2;
    }
    return a;
}

int Compute(int a, int b)
{
    if(!b)
        return 1;
    if(b % 2 == 0)
        return (1LL * Compute(a,b-1) * a + 1) % MOD;
    return (Compute(a,b/2) * (1 + LgPut(a,b/2+1))) % MOD;
}

int main()
{
    freopen("sumdiv.in","r",stdin);
    freopen("sumdiv.out","w",stdout);
    int i,a,b,res=1,nr=0;
    scanf("%d %d",&a,&b);
    if(!a)
    {
        printf("0\n");
        return 0;
    }
    for(i = 2; i * i <= a; ++i)
        if(a % i == 0)
        {
            nr = 0;
            while(a % i == 0)
            {
                a /= i;
                ++nr;
            }
            res = (res * Compute(i,nr*b)) % MOD;
        }

    printf("%d\n",a);
    if(a > 1) res = (res * Compute(a,b)) % MOD;
    printf("%d\n",res);


    return 0;
}