Cod sursa(job #2661309)

Utilizator Fantastic_Mantudor voicu Fantastic_Man Data 21 octombrie 2020 19:13:42
Problema GFact Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#define MAXDIV 30
using namespace std;
int d[MAXDIV+1],e[MAXDIV+1];
int nrdivprimi=0;
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] )
            return false;
    return true;
}
long long cautbin() {
    long long st = 0, dr = (long long) 6 * ((long long)1e13), mij;
    while ( dr - st > 1 ) {
        mij = (st + dr) / 2;
        if ( divide(mij) == false )
            st = mij;
        else
            dr = mij;
        
    }
    return dr;
}
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int main() {
    int n, p, q, div;
    fin >> p >> q;
    n=p;
    for ( div = 2; div * div <= p; div++ )
        if ( p % div == 0 ) {
            d[++nrdivprimi] = div;
            while ( n % div == 0 ) {
                e[nrdivprimi]++;
                n /= div;
            }
            e[nrdivprimi] *= q;
        }
    if(n>1) {
        d[++nrdivprimi] = n;
        e[nrdivprimi] = q;
    }
    fout << cautbin();
 
    return 0;
}