这题有点烦躁。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <math.h>
using namespace std;
#define MOD 9901
int p[10000];
int k[10000];
int t=0;
int A,B;
__int64 power(__int64 a,__int64 n){
__int64 res = 1;
while(n>0){
if(n%2 == 1)
res = (res*a)%MOD;
a = (a*a)%MOD;
n /= 2;
}
return res;
}
__int64 sum(__int64 a,__int64 n){
if(n==0)
return 1;
if(n%2==1)
return (sum(a,n/2)*(1+power(a,n/2+1))) % MOD;
else
return (sum(a,n/2-1)*(1+power(a,n/2+1)) + power(a,n/2)) % MOD;
}
void process(){
int res = 1;
for(int i=0;i<t;++i){
res = (res * sum(p[i],k[i]*B))%MOD;
}
cout<<res<<endl;
}
int main(){
while(cin>>A>>B){
t = 0;
for(int i=2;i*i<=A;++i){
if(A%i == 0){
k[t] = 0;
p[t] = i;
do{
++k[t];
A /= i;
}while(!(A%i));
++t;
}
}
if(A!=1){
p[t] = A;
k[t] = 1;
++t;
}
process();
}
return 0;
}