| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
没有用逆元,根据卷积的性质进行二分,快速写0S#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int mod=9901;
const int N=7100;
#define ll long long
int prime[N+1];
void get_prime(){
for(int i=2;i<=N;i++){
if(!prime[i])prime[++prime[0]]=i;
for(int j=1;j<=prime[0]&&i*prime[j]<=N;j++){
prime[i*prime[j]]=1;
if(i%prime[j]==0)break;
}
}
}
int factor[100][2],fatCnt;
void get_factor(ll x){
memset(factor,0,sizeof factor),fatCnt=0;
for(int i=1;i<=prime[0];i++){
if(x%prime[i]==0){
factor[fatCnt][0]=prime[i];
while(x%prime[i]==0)x/=prime[i],factor[fatCnt][1]++;
fatCnt++;
}
}
if(x!=1)factor[fatCnt][0]=x,factor[fatCnt++][1]=1;
}
ll Pow(ll a,ll b){
ll ans=1;
while(b){
if(b&1)ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
ll sum(ll p,ll n){
if(p==0)return 0;
if(n==0)return 1;
if(n&1) return ((1+Pow(p,n/2+1))%mod*sum(p,n/2)%mod)%mod;
else return ((1+Pow(p,n/2+1))%mod*sum(p,n/2-1)+Pow(p,n/2)%mod)%mod;
}
ll slove(ll A,ll B){
get_factor(A);
ll ans=1;
for(int i=0;i<fatCnt;i++){
ans*=sum(factor[i][0],B*factor[i][1])%mod;
ans%=mod;
}
return ans;
}
int main(){
get_prime();
ll A,B;
while(cin>>A>>B) cout<<slove(A,B)<<endl;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator