dalao求调P1593因子和 RE了一个点
#include<iostream>
//#pragma GCC optimize(2)
using namespace std;
const int N=9901;
const int M=1e7+5;
char buf[M],*p1,*p2;
template<typename T>inline void readT(T &x){
bool f=1;x=0;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=!f;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
x=(f?x:-x);return;
}//快读
long long ppow(long long a,long long b)//是求a的b次方
{
long long ans=1,base=a;
while(b>0)
{
if(b&1)
ans=(ans*base)%N;
base=(base*base)%N;
b>>=1;
}
return ans;
}//快速幂
long long o=1,n,m,ans=1,f[M],a[M],u=2,num=0;;
int sum(int p,int k) { // p^0 + p^1 + p^2 + ... + p^k
if (k==0) return 1;
if (k&1){
return(1+ppow(p,(k+1)/2))*sum(p,k/2)%N;
} else{
return(ppow(p,k)+sum(p,k-1))%N;
}
}//等比数列分治
int main()
{
readT(n),readT(m);
while(n!=1)
{
if(n%u==0)
{
a[o]=u;
f[a[o]]++;
n/=u;
}
else
{
u++;
o++;
}
}//存储素因数
/*for(int i=1;i<=o;i++)
{
cout<<f[a[i]]<<endl;
}*/
for(int i=1;i<=o;i++)
{
num=sum(a[i],f[a[i]]*m)%N;
//cout<<num<<endl;
ans=(ans*num)%N;
}//利用因子和公式
//for(int i=1;i<=o;i++)
//cout<<f[a[o]]/m<<endl;
printf("%lld",ans);
}