描述
给定两个正整数A和B(0<=A, B<=5*107),求AB的所有约数之和,因为结果可能很大,你只要将结果对9901取余即可。
输入
两个正整数A和B(0<=A, B<=5*107)
输出
AB 约数之和mod 9901。
样例输入
2 3
样例输出
15
代码记录
#include<bits/stdc++.h> using namespace std; const int N=1e4; const int mod=9901; typedef long long ll; int a,b; ll num[N],siz[N]; ll power(ll x,ll y) { ll ans=1; while(y>0) { if(y%2)ans=(ans*x)%mod; y/=2; x=x*x%mod; } return ans; }//快速幂 ll sum(ll x,ll y) { if(y==0)return 1; if(y%2)return (sum(x,y/2)*(1+power(x,y/2+1)))%mod; return (sum(x,y/2-1)*(1+power(x,y/2+1))+power(x,y/2))%mod; } int main() { cin>>a>>b; int i=2,k=0,ans=1; while(i*i<=a) { if(a%i==0) { num[k]=i; while(a%i==0) { siz[k]++;//记录第k个因子的个数 a/=i; } k++; } i==2?i++:i+=2;//忽略除2以外的偶数。 } if(a!=1)num[k]=a,siz[k++]=1; //上面找出a所有的因子 for(int i=0;i<k;i++) { ans=(ans*(sum(num[i],siz[i]*b)%mod))%mod; } cout<<ans<<endl; }
原文:https://www.cnblogs.com/llhsbg/p/11374720.html