Cod sursa(job #1996472)

Utilizator victoreVictor Popa victore Data 1 iulie 2017 17:29:35
Problema Suma divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>

using namespace std;

long long a,b;
const int mod=9901;

inline long long pow(long long f,long long k)
{
    if(k==0)
        return 1;
    if(k&1)
        return (f*pow(f,k-1))%mod;
    else
    {
        k/=2;
        long long temp=pow(f,k);
        return (temp*temp)%mod;
    }
}

inline long long sum(long long f,long long k)
{
    if(k==0)
        return 1;
    if(k&1)
        return (1+f*(sum(f,k-1)))%mod;
    else
    {
        k/=2;
        long long putere=pow(f,k)%mod,temp=sum(f,k)%mod;
        return (temp+putere*(temp-1))%mod;
    }
}


int main()
{
    freopen("sumdiv.in","r",stdin);
    freopen("sumdiv.out","w",stdout);
    scanf("%lld%lld",&a,&b);
    int exp=0,rez=1,d=2;
    while(d*d<=a)
    {
        exp=0;
        while(a%d==0)
            exp++,a/=d;
        if(exp)
            rez=rez*sum(d%mod,exp*d)%mod;
        ++d;
    }
    if(a)
        rez=rez*sum(a%mod,b)%mod;
    printf("%d",rez);
}