Cod sursa(job #1251261)

Utilizator lauratalaatlaura talaat lauratalaat Data 29 octombrie 2014 09:59:27
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
long long fact[30001],putere[30001],k,s,q,p;
long long puterea( long long n, long long p){
    long long s=0;
    while(p <= n){
        s += n/p;
        n = n/p;
    }
    return s;
}
bool verif ( long long x){
    long long i,cate=0;
    for(i=1; i<=k; i++){
        s = puterea(x, fact[i]);
        if(q*putere[i]>s)
            return false;
    }
    return true;
}
long long cautbin (){
    long long i=0,pas=1LL<<60LL;
    while(pas!=0){
        if(!verif(i+pas))
            i+=pas;
        pas>>=1;
    }
    return 1 + i;
}
int main(){
    long long i,r,pu;
    freopen("gfact.in","r",stdin);
    freopen("gfact.out","w",stdout);
    scanf("%lld%lld",&p,&q);
    i=2;
    while(i*i<=p){
        if(p%i==0){
            pu=0;
            while(p%i==0){
                p=p/i;
                pu++;
            }
            k++;
            fact[k]=i;
            putere[k]=pu;
        }
        i++;
    }
    if(p!=1){
        k++;
        fact[k]=p;
        putere[k]=1;
    }
    r=cautbin();
    printf("%lld\n",r);
    return 0;

}