Pagini recente » Cod sursa (job #2042946) | Cod sursa (job #151499) | Cod sursa (job #2611568) | Cod sursa (job #1119037) | Cod sursa (job #1060921)
#include<fstream>
using namespace std;
const long long mod=9901;
long long a,b,fact[50],exp[50],nrf,i;
void factorizeaza(long long x) {
long long p=2;
if (x%p==0) {
++nrf; fact[nrf]=p;
while (x%p==0) { ++exp[nrf]; x/=p; }
}
++p;
while (p*p<=x)
if (x%p!=0) p+=2;
else {
++nrf; fact[nrf]=p;
while (x%p==0) { ++exp[nrf]; x/=p; }
p+=2;
}
if (x>1) { ++nrf; exp[nrf]=1; fact[nrf]=x; }
}
int pow(long long x, long long y) {
long long rez=1;
while (y>0)
if (y%2==0) { x=(x*x)%mod; y/=2; }
else { rez=(rez*x)%mod; --y; }
return(rez);
}
void euclid(long long &a,long long &b, long long x, long long y) {
if (y==0) { a=1; b=0; }
else {
long long ao,bo;
euclid(ao,bo,y,x%y);
a=bo;
b=(ao-(x/y)*bo+mod)%mod;
}
}
int inv(long long x) {
long long a,b;
euclid(a,b,x,mod);
return(a);
}
int main(void) {
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
fin>>a>>b;
factorizeaza(a);
for (i=1; i<=nrf; ++i) exp[i]*=b;
long long rez=1;
for (i=1; i<=nrf; ++i)
if (fact[i]%mod==1) rez=(rez*(exp[i]+1))%mod;
else rez=(rez* ((pow(fact[i],exp[i]+1)+mod-1)%mod * inv(fact[i]-1))%mod )%mod;
fout<<rez%mod;
return(0);
}