标签:oid tpc 约数 分解质因数 一个 i++ str 项目 name
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int mod=9901;
int p[10010],c[10010];
int m;
ll quick_pow(ll a,ll b){//快速幂
ll ans=1,base=a;
while(b){
if(b&1) ans=(ans*base)%mod;
base=(base*base)%mod;
b>>=1;
}
return ans;
}
void divide(int n){//分解质因数
m=0;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
p[++m]=i,c[m]=0;
while(n%i==0) n/=i,c[m]++;
}
}
if(n>1)
p[++m]=n,c[m]=1;
}
ll sum(ll dp,ll dc){
//二分法求等比数列和
if(dp==0) return 0;
if(dc==0) return 1;
if(dc&1){//c奇数
return ((1+quick_pow(dp,dc/2+1))%mod*sum(dp,dc/2)%mod)%mod;
}else{//c偶数
return ((1+quick_pow(dp,dc/2))%mod*sum(dp,dc/2-1)+quick_pow(dp,dc))%mod;
}
}
int main(){
int a,b;
while(cin>>a>>b){
divide(a);//将底数分解
int ans=1;
for(int i=1;i<=m;i++){
ans=(ans*sum(p[i],c[i]*b)%mod)%mod;
}
cout<<ans<<"\n";
}
return 0;
}
标签:oid tpc 约数 分解质因数 一个 i++ str 项目 name
原文地址:https://www.cnblogs.com/rign/p/10057769.html