PKU 2649 Factovisors
http://poj.org/problem?id=2649
二つの負でない整数n,mが与えられる。
n!がmで割り切れるかどうかを判定しろというような問題。
mを素因数分解して、n!の因数と比べました。
0が来た時の処理を忘れてREもらいました。
main(){
ll a,b;
while(cin>>a>>b){
if(b==0){
cout<<b<<" does not divide "<<a<<'!'<<endl;
continue;
}
vector<PI> fact;
ll p=b;
for(ll i=2;i*i<=p;++i){
if(p%i)continue;
int t=0;
while(p%i==0){
++t;
p/=i;
}
fact.pb(mp(i,t));
}
if(p!=1)fact.pb(mp(p,1));
bool ok=true;
FOR(it,fact){
int di=0;
ll ba=it->F;
while(a/ba){
di+=a/ba;
ba=ba*it->F;
}
if(di<it->S){
ok=false;
break;
}
}
if(ok)
cout<<b<<" divides "<<a<<'!'<<endl;
else
cout<<b<<" does not divide "<<a<<'!'<<endl;
}
}