Sumdiv
解题思路
显然,
a
b
a^b
ab 的分解质因数就是
a
a
a 的分解质因数数量每个乘以
b
b
b 。
求和直接用等比数列求和公式即可。
code
#include<iostream>
#include<cstdio>
#include<cmath>
#define int long long
using namespace std;
const int mod=9901;
int a,b,ans;
int x[10000],y[10000],tot;
int ksm(int p,int q)
{
int t=p,s=1;
while(q)
{
if(q&1) s=(s*t)%mod;
t=(t*t)%mod;
q>>=1;
}
return s;
}
int sum(int p,int q)
{
if(q==0) return 1;
if(q%2) return sum(p,q/2)*(1+ksm(p,q/2+1))%mod;
else return (sum(p,q-1)+ksm(p,q))%mod;
}
signed main()
{
cin>>a>>b;
for(int i=2;i*i<=a;i++)
{
if(a%i!=0) continue;
x[++tot]=i;
while(a%i==0) y[tot]++,a/=i;
}
if(a!=1) x[++tot]=a,y[tot]=1;
int ans=1;
for(int i=1;i<=tot;i++)
ans=(ans*sum(x[i],y[i]*b))%mod;
cout<<ans<<endl;
}