Cod sursa(job #907676)

Utilizator teoionescuIonescu Teodor teoionescu Data 8 martie 2013 10:48:25
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
long long p,q,baz[100],exp[100],num=0;
void desc(long long n){
    long long i=2,k;
    while(i*i<=n){
        if(n%i==0){
            k=0;
            while(n%i==0){
                n/=i;
                k++;
            }
            baz[++num]=i;
            exp[num]=k;
        }
        i++;
    }
    if(n!=1){
        baz[++num]=n;
        exp[num]=1;
    }
}
long long verif(long long n){
    long long i,e,sediv=1,aux;
    for(i=1;i<=num;i++){
    aux=n;
    e=0;
    while(aux>=baz[i]){
        e+=aux/baz[i];
        aux/=baz[i];
    }
    if(e<exp[i]) sediv=0;
    }
    return sediv;
}
long long caut(){
    int i=0, pas=1<<31;
    while(pas!=0){
        if(verif(i+pas)==0) i+=pas;
        pas>>=1;
    }
    return 1+i;
}
int main(){
    long long i;
    in>>p>>q;
    desc(p);
    for(i=1;i<=num;i++) exp[i]*=q;
    out<<caut();
    return 0;
}