数学:洛谷P1593 因子和

原题传送门

a=p1k1p2k2p3k3pnkn
ab=p1k1bp2k2bp3k3bpnknb
ans=(1+p11+p12+p13++p1k1b)(1+p21+p22+p23++p1k2b)...(1+pn1+pn2+pn3++pnknb)

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

#include<bits/stdc++.h>
#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<<mi[1]<<endl;
    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<<s<<endl;
        ans*=s;ans%=mod;
    }
    cout<<ans;
    return 0;
}

 

posted @ 2021-11-09 23:54  遥望未来weilai  阅读(160)  评论(0)    收藏  举报