Pagini recente » Cod sursa (job #2743217) | Cod sursa (job #622762) | Istoria paginii runda/creangar | Cod sursa (job #1340264) | Cod sursa (job #1016692)
#include <fstream>
#define X 9901
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
int A,B,S;
long long Putere(long long N,long long P)
{
long long m=1;
while (P!=1)
if(P % 2==0)
{
N=(N*N) % X;
P/=2;
}
else
{
m=(m*N) % X;
P--;
}
return (m*N)% X;
}
bool Prim(int x)
{
if(x==2)return true;
if(x % 2==0)return false;
for(int i=3;i*i<=x;i+=2)
if(x % i==0)return false;
return true;
}
int main()
{
f>>A>>B;
if(!B){g<<1<<'\n';return 0;}
if(!A){g<<0<<'\n';return 0;}
if(A==1 || A % X==0){g<<1<<'\n';return 0;}
S=1;
if(A % 2==0)
{
int k=0;
while(A % 2==0)A/=2,++k;
int p1=(Putere(2,k*B+1)+X-1)% X;
S=(1LL*S*p1) % X;
}
for(int i=3;i*i<=A;i+=2)
if(A % i==0)
{
int k=0;
while(A % i==0)A/=i,++k;
int p1=(Putere(i,k*B+1)+X-1)% X;
int p2=Putere(i-1,X-2);
S=(((1LL*S*p1) % X)*p2)% X;
}
if(A>1)
{
int k=1;
int p1=(Putere(A,k*B+1)+X-1)% X;
int p2=Putere(A-1,X-2);
S=(((1LL*S*p1) % X)*p2)% X;
}
g<<S<<'\n';
f.close();g.close();
return 0;
}