Cod sursa(job #1302072)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 26 decembrie 2014 16:26:18
Problema GFact Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>
#define DIM 40000000000000
using namespace std;

long long p,q,i,j,st,dr,mid,nr;
long long a[60000],b[60000];
int verif(int x){
    int i,nrap,aux;
    for(i=1;i<=nr;i++){
        nrap=0;
        aux=a[i];
        while(x/aux!=0 && nrap<=b[i]){
            nrap+=x/aux;
            aux*=a[i];
        }
        if(nrap<b[i])
            return 0;
    }
    return 1;
}
int main(){
    freopen("gfact.in","r",stdin);
    freopen("gfact.out","w",stdout);
    scanf("%ld%ld",&p,&q);
    for(i=2;i*i<=p;i++){
        if(p%i==0){
            a[++nr]=i;
            while(p%i==0)
                b[nr]+=q,p/=i;
        }
    }
    if(p!=1){
        a[++nr]=p;
        b[nr]=q;
    }
    st=1;dr=1LL*p*q;
    while(st<=dr){
        mid=(st+dr)>>1;
        if(verif(mid)){
            dr=mid-1;
        }
        else
            st=mid+1;
    }
    printf("%ld",st);
    return 0;
}