Pagini recente » Cod sursa (job #1662690) | Cod sursa (job #1550093) | Cod sursa (job #2397785) | Cod sursa (job #284755) | Cod sursa (job #1721030)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
bool B[10100];
ll T,P[7000],p,D[7000],R[7000],x,y,r;
ll const m = 9901;
ll put(ll num,ll e,ll mod){
if(e <= 0) return 1;
ll rs = put(num,e/2,mod);
return (((rs*rs)%mod)*(e%2==1 ? num : 1))%mod+mod;
}
ll inv(ll num,ll mod){
return put(num,mod-2,mod);
}
int main(){
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");
for(int i = 2;i<=10000;i++)
if(!B[i]) for(int j = i+i;j<=10000;j+=i) B[j] = 1;
for(int i = 2;i<=10000;i++) if(!B[i]) P[p++] = i;
cin >> x >> y;
if(x == 0) return cout << 0,0;
if(x == 1 || y == 0) return cout << 1,0;
int i = 0;
r = 0;
while(x>1 && i < p && P[i]*P[i] <= x){
while(i<p && P[i]*P[i] <= x && x%P[i] != 0) i++;
if(i<p && P[i]*P[i] <= x){
D[++r] = P[i];
R[r] = 0;
while(x%D[r] == 0) R[r]++,x/=D[r];
}
}
if(x > 1) D[++r] = x,R[r] = 1;
ll sum = 1;
for(int i = 1;i<=r;i++) R[i]*=y;
for(int i = 1;i<=r;i++) sum=(((put(D[i],R[i]+1,m)-1)*inv(D[i]-1,m)%m)*sum)%m;
cout << sum << '\n';
return 0;
}