Cod sursa(job #2659563)

Utilizator Fantastic_Mantudor voicu Fantastic_Man Data 17 octombrie 2020 08:33:35
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#define MAXDIV 30
using namespace std;
int d[MAXDIV+1],e[MAXDIV+1],nrdivprimi=0,p,q,n,dvz;
long long leg(int p,long long n) {
    long long put=0,prod=p;
    while(prod<=n) {
        put+=n/prod;
        prod*=p;
    }
    return put;
}
bool divide(long long n) {
    for(int i=1;i<=nrdivprimi;i++)
        if(leg(d[i],n)<e[i]*q)
            return false;
    return true;
}
long long cautbin() {
    long long st=0,dr=2000000000LL*30000,poz=0,mij;
    while(st<=dr) {
        mij=(st+dr)/2;
        if(divide(mij)==1) {
            poz=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }
    return poz;
}
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int main() {
    fin>>p>>q;
    n=p;
    for(dvz=2;dvz*dvz<=n;dvz++)
        if(n%dvz==0) {
            d[++nrdivprimi]=dvz;
            while(n%dvz==0) {
                e[nrdivprimi]++;
                n/=dvz;
            }
        }
    if(n>1) {
        d[++nrdivprimi]=n;
        e[nrdivprimi]=1;
    }
    fout<<cautbin();

    return 0;
}