Cod sursa(job #1118153)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 24 februarie 2014 01:12:17
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<cstdio>
using namespace std;
const int mod = 9901;
int a,b,i,e,sol,aux;
int lgput(int a,int b)
{
    int r=1;
    for(int i=1;i<=b;i<<=1)
    {
        if(i&b) r=(1LL*a*r)%mod;
        a=(1LL*a*a)%mod;
    }
    return r;
}
int inv(int x)
{
    x%=mod; if(!x) return 1;
    return lgput(x,mod-2);
}
int main()
{
	freopen("sumdiv.in","r",stdin);
	freopen("sumdiv.out","w",stdout);
	scanf("%d%d",&a,&b); sol=1;
	for(i=2;i*i<=a;i++)
        if(a%i==0)
        {
            e=0;
            while(a%i==0) a/=i,e++;
            e*=b;
            aux=(lgput(i,e+1)-1+mod)%mod;
            aux=(1LL*aux*inv(i-1))%mod;
            sol=(1LL*sol*aux)%mod;
        }
    if(a>1)
    {
        i=a; e=1;
        e*=b;
        aux=(lgput(i,e+1)-1+mod)%mod;
        if(!aux) sol=(1LL*sol*(b+1))%mod;
        else
        {
            aux=(1LL*aux*inv(i-1))%mod;
            sol=(1LL*sol*aux)%mod;
        }
    }
    printf("%d\n",sol);
	return 0;
}