Cod sursa(job #2661321)

Utilizator Fantastic_Mantudor voicu Fantastic_Man Data 21 octombrie 2020 19:22:12
Problema GFact Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#define MAXDIV 30
using namespace std;
int d[MAXDIV],e[MAXDIV];
int nrdivprimi=0;
long long leg( int p,long long n ) {
    long long put=0, prod=p;
    while ( prod<=n ) {
        put += n / prod;
        prod *= (long long) p;
    }
    return put;
}
bool divide ( long long n) {
    for ( int i = 0; i < nrdivprimi; i++ )
        if ( leg(d[i], n) < e[i] )
            return false;
    return true;
}
long long cautbin() {
    long long pos, pas = (long long)1<<60;
    for ( pos = 0; pas; pas >>= 1 )
        if (!divide(pos+pas))
            pos+=pas;
    return pos+1;
}
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;
}