洛谷P1593 因子和(分治法)
作者:互联网
输入两个整数 aa 和 bb,求 a^bab 的因子和。
由于结果太大,只要输出它对 99019901 取模的结果。
输入格式
仅一行,为两个整数 aa 和 bb。
输出格式
输出一行一个整数表示答案对 99019901 取模的结果。
输入输出样例
输入 #12 3输出 #1
15
说明/提示
数据规模与约定
对于全部的测试点,保证 1 \leq a \leq 5 \times 10^71≤a≤5×107,0 \leq b \leq 5 \times 10^70≤b≤5×107。
1 #include<iostream> 2 using namespace std; 3 typedef long long ll; 4 const ll mod=9901; 5 ll A,B; 6 ll quipow(ll n,ll k) 7 { 8 ll ans=1%mod; 9 while(k) 10 { 11 if(k&1)ans=ans*n%mod; 12 k>>=1; 13 n=n*n%mod; 14 } 15 return ans; 16 } 17 ll sum(ll n,ll c) 18 { 19 if(c==0)return 1%mod; 20 if(c&1)return sum(n,c/2)* (quipow(n,c/2+1)+1)%mod; 21 else return ((quipow(n,c/2)+1)*sum(n,c/2-1)+quipow(n,c))%mod; 22 } 23 int main() 24 { 25 cin>>A>>B; 26 ll ans=1%mod; 27 for(int i=2;i*i<=A;i++) 28 { 29 ll cnt=0; 30 while(A%i==0) 31 { 32 cnt++; 33 A/=i; 34 } 35 ans=(ans*sum(i,cnt*B))%mod; 36 } 37 if(A!=1)ans=(ans*sum(A,B))%mod; 38 cout<<ans<<endl; 39 return 0; 40 }
标签:洛谷,P1593,ll,分治,leq,quipow,ans,return,mod 来源: https://www.cnblogs.com/matt-su/p/15852755.html