数学:洛谷P1593 因子和


原题传送门

a=p1k1???p2k2???p3k3????pnkn??
ab=p1k1??b??p2k2??b??p3k3??b???pnkn??b?
ans=(1+p11?+p12?+p13?++p1k1??b?)?(1+p21?+p22?+p23?++p1k2??b?)?...?(1+pn1?+pn2?+pn3?++pnkn??b?)

然后用等比数列求和公式+快速幂求得

#include
#define N 50000007
#define mod 9901
using namespace std;
int main(){
    int a,b,n,i,j,x,s,ans,mi[10004],fac[10004];
    cin>>a>>b;
    b%=(mod-1);n=0;
    for(i=2;i<=a;i++){
        if(a%i==0) n++;
        while(a%i==0){
            fac[n]=i;
            mi[n]++;
            a/=i;
        }
    }
    for(i=1;i<=n;i++){mi[i]*=b;mi[i]%=(mod-1);}
    ans=1;
//    cout<
    for(i=1;i<=n;i++){
        x=1;s=1;
        for(j=1;j<=mi[i];j++){
            x*=(fac[i]%mod);x%=mod;
            s+=x;s%=mod;
        }
//        cout<
        ans*=s;ans%=mod;
    }
    cout<<ans;
    return 0;
}