97. Sum of Divisors [Math Quick Power]

insert image description here
insert image description here

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int mod=9901;
LL a,b;
LL quick_mi(LL a,LL b)
{
    
    
    LL sum=1;
    while(b)
    {
    
    
        if(b&1) sum=sum*a%mod;
        b>>=1;
        a=a*a%mod;
    }
    return sum%mod;
}
LL sum(LL p,LL k)
{
    
    
    if(k==1) return 1;
    if(k&1) return sum(p,k-1)%mod+quick_mi(p,k-1)%mod;
    else return sum(p,k/2)%mod*(quick_mi(p,k/2)%mod+1);
}
int main(void)
{
    
    
    cin>>a>>b;
    LL ans=1;
    for(int i=2;i*i<=a;i++)
    {
    
    
        LL s=0;
        while(a%i==0) a/=i,s++;
        if(a) ans=ans*sum(i,s*b+1)%mod;
    }
    if(a!=1) ans=ans*sum(a,1*b+1)%mod;
    if(a==0) puts("0");
    else cout<<ans;
    return 0;
}

Guess you like

Origin blog.csdn.net/qq_46527915/article/details/123606011