计算A的B次方的所有质因数之和
先将A分解质因数,推广出约数的和的式子
在推广至整个A的b次方
乘积的模等于模的乘积再取模,
每一项都是等比数列
可用等比数列求和公式计算
可先用快速幂计算分子和分母对要求数求模
只要坟分母不是9901的倍数,就直接计算分母的乘法逆元
用乘法逆元乘分子代替原式子
如果分母是乘法逆元的倍数,则此时乘法逆元不存在
但是p%9901==1;
整个式子可化简为 如下
#include<iostream>
#include<cmath>
using namespace std;
const int maxn=5000,mod=9901;
int A;
int B;
int m;
int p[maxn],c[maxn];
long long sum=1;
int divide(int n)
{
m=0;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
p[++m]=i;
c[m]=0;
while(n%i==0)
{
n/=i;
c[m]++;
}
}
}
if(n>1)
{
p[++m]=n;
c[m]=1;
}
// for(int i=1;i<=m;i++)
// {
// cout<<p[i]<<' '<<c[i]<<endl;
// }
}
int power(int a,int b)
{
int ans=1;
for(;b;b>>=1)
{
if(b&1)
ans=(long long)ans*a%mod;
a=(long long)a*a%mod;
}
return ans;
}
int main()
{
cin>>A>>B;
divide(A);
sum=1;
for(int i=1;i<=m;i++)
{
if((p[i]-1)%mod==0)
{
sum=((long long)B*c[i]+1)%mod*sum%mod;
cout<<sum<<endl;
continue;
}
int x=power(p[i],(long long)B*c[i]+1);
x=(x-1+mod)%mod;;
int y=p[i]-1;
y=power(y,mod-2);
sum=(long long)sum*x%mod*y%mod;
cout<<sum<<endl;
}
return 0;
}