Pagini recente » Cod sursa (job #417613) | Cod sursa (job #289032) | Cod sursa (job #74750) | Cod sursa (job #1798144) | Cod sursa (job #756767)
Cod sursa(job #756767)
#include <fstream>
using namespace std;
const char InFile[]="sumdiv.in";
const char OutFile[]="sumdiv.out";
const long long MOD=9901;
#define Nrdivm (1<<14)
#define Nrpfm 10
long long A,B,REZ;
ifstream fin(InFile);
ofstream fout(OutFile);
long long power(long long a, long long n)
{
if(!n)
return 1;
long long v=power(a,n>>1);
if(n&1)
return v*v%MOD*(a%MOD)%MOD;
return v*v%MOD;
}
long long sum(long long p, long long n)
{
if(!n)
return 1;
if(n&1)
return sum(p,n>>1)*(power(p,(n>>1)+1)+1)%MOD;
return (sum(p,n-1)+power(p,n))%MOD;
}
int main()
{
fin>>A>>B;
fin.close();
long long Div[Nrdivm],Pf[Nrpfm],M[Nrpfm],nrdiv=0,nrpf=0;
for(register long long i=1;i*i<=A;++i)
{
if(A%i==0)
{
Div[++nrdiv]=i;
}
}
for(register long long i=nrdiv;i;--i)
{
Div[++nrdiv]=A/Div[i];
}
for(register long long i=2+(A==1);i<=nrdiv;++i)
{
if(A%Div[i]==0)
{
Pf[++nrpf]=Div[i];
M[nrpf]=0;
while(A%Div[i]==0)
{
++M[nrpf];
A/=Div[i];
}
}
}
REZ=1;
for(register long long i=1;i<=nrpf;++i)
{
REZ=REZ*sum(Pf[i],M[i]*B)%MOD;
}
fout<<REZ;
fout.close();
return 0;
}