Pagini recente » Cod sursa (job #3166474) | Cod sursa (job #3130792) | Cod sursa (job #2457279) | Cod sursa (job #1272761) | Cod sursa (job #2930976)
#include <iostream>
#include <fstream>
using namespace std;
#define Nr 9901
void euclid(int a, int b, int &x, int &y)
{
if(b==0)
{
x=1;
y=0;
}
else
{
int x0, y0;
euclid(b, a%b, x0, y0);
x=y0;
y=x0-(a/b)*y0;
}
}
int main()
{
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
long long s=0;
int a, b, exp, d,x, y, rez, cd;
in>>a>>b;
d=2;
while(d*d<=a)
{
cd=d;
while(a%d==0)
{
a=a/d;
exp++;
}
if(exp>0)
{
exp*=b;
exp+=1;
rez=1;
while(exp>0)
{
if(exp%2==1)
rez=(rez*d)%Nr;
d=(d*d)%Nr;
exp=exp/2;
}
rez=rez-1;
euclid(cd-1, Nr, x, y);
if(x<0) x+=Nr;
s=(s+(rez*x)%Nr)%Nr;
}
exp=0;
d++;
}
if(a>1)
{
exp=1; d=a;
exp*=b;
exp+=1;
rez=1;
while(exp>0)
{
if(exp%2==1)
rez=(rez*d)%Nr;
d=(d*d)%Nr;
exp=exp/2;
}
rez=rez-1;
d=a;
euclid(d-1, Nr, x, y);
if(x<0) x+=Nr;
s=(s+(rez*x)%Nr)%Nr;
}
out<<s;
return 0;
}