Cod sursa(job #1464651)

Utilizator stelian2000Stelian Chichirim stelian2000 Data 24 iulie 2015 02:33:36
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
#include <cmath>

using namespace std;

const int mod=9901;

int putere(int a,int b)
{
    int s=1;
    while(b>0)
    {
        if(b%2==1) s=(1LL*s*a)%mod;
        a=(1LL*a*a)%mod;
        b=b/2;
    }
    return s;
}

int main()
{
    freopen("sumdiv.in","r",stdin);
    freopen("sumdiv.out","w",stdout);
    int sol,c,a,b,s;
    scanf("%d%d",&a,&b);
    sol=1;
    c=sqrt(a);
    for(int i=2;i<=c;i++)
        if(a%i==0)
        {
            int nr=0;
            while(a%i==0)
            {
                nr++;
                a=a/i;
            }
            s=(putere(i,nr*b+1)-1+mod)%mod;
            sol=(1LL*sol*s*putere(i-1,mod-2))%mod;
        }
    if(a>1)
    {
        if(a%mod==1) sol=(1LL*sol*(b+1))%mod;
        else
        {
            s=(putere(a,b+1)-1+mod)%mod;
            sol=(1LL*sol*s*putere(a-1,mod-2))%mod;
        }
    }
    printf("%d",sol);
    return 0;
}