Pagini recente » Istoria paginii runda/sim_ix_9_12_20/clasament | Cod sursa (job #2254848) | Cod sursa (job #1820064) | Cod sursa (job #2473451) | Cod sursa (job #1901917)
#include <cstdio>
#include <cmath>
#define NMax 7071
using namespace std;
long long a, n, p, i, j, e, m, s=1, q[NMax+5], k;
bool viz[NMax+5];
int main (){
freopen("sumdiv.in", "r", stdin);
freopen("sumdiv.out", "w", stdout);
scanf("%lld%lld", &a, &n);
p=1;
while (n){
if (n%2){
p=(p*a)%9901;
--n;
}
else {
a=(a*a)%9901;
n/=2;
}
}
// printf("%lld\n", p);
k=0;
for (i=2; i<=p; i++){
if (viz[i]==0){
q[++k]=i;
for (j=2; j*i<=p; j++)
viz[i*j]=1;
}
}
i=1;
// printf("%d\n", k);
while (q[i]*q[i]<=p && i<=k){
e=0;
m=q[i];
while (p%q[i]==0){
p/=q[i];
e++;
m*=q[i];
}
if (e) s=(s*(m-1)/(q[i]-1))%9901;
++i;
}
if (p>1) s=(s*((p*p-1)/(p-1)))%9901;
printf("%lld", s);
}