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; } }