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;

  }
}