Cod sursa(job #1378476)

Utilizator MaarcellKurt Godel Maarcell Data 6 martie 2015 12:27:42
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <fstream>
#define LL long long int
using namespace std;

LL P,Q,K,f[200],p[200];

bool check(LL x){
    LL i,cnt,ax;
    for (i=1; i<=K; i++){
        cnt=0,ax=f[i];
        while (cnt<p[i] && ax<=x){
            cnt+=x/ax;
            ax*=f[i];
        }
        if (cnt<p[i]) return 0;
    }

    return 1;
}

int main() {
    ifstream fin("gfact.in");
    ofstream fout("gfact.out");
    fin >> P >> Q;

    LL i;
    for (i=2; i*i<=P; i++)
        if (P%i==0) {
            f[++K]=i;
            while (P%i==0) P/=i,p[K]++;
            p[K]*=Q;
        }

    if (P!=1) f[++K]=P,p[K]=Q;

    LL mid,l=1,r=(1LL<<62);
    while (l<r){
        mid=(l+r)/2;
        if (check(mid)) r=mid;
        else l=mid+1;
    }

    fout << r;

    return 0;
}