Cod sursa(job #1093275)

Utilizator Athena99Anghel Anca Athena99 Data 27 ianuarie 2014 21:24:46
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>

using namespace std;
 
ifstream fin("gfact.in");
ofstream fout("gfact.out");

typedef long long i64;

const i64 kmax= 100;
i64 e[kmax+1], f[kmax+1];
i64 k, q;

i64 maxpow( i64 x, i64 p ) {
    i64 y= 0;
    while ( x>0 ) {
        y= y+x/p;
        x/= p;
    }

    return y;
}
 
bool check( i64 x ) {
    bool ok= 0;
    for ( i64 i= 1; i<=k; ++i ) {
        if ( maxpow( x, e[i] )<f[i]*q ) {
            ok= 1;
        }
    }

    return ok;

}
int main(  ) {
    i64 p;
    fin>>p>>q;
    
    for ( i64 i= 2; i*i<=p; ++i ) {
        if ( p%i==0 ) {
            e[++k]= i;
            while ( p%i==0 ) {
                p/= i;
                ++f[k];
            }
        }
    }
    if ( p>1 ) {
        e[++k]= p;
        f[k]= 1;
    }

    i64 sol= 0, step= (i64)1<<60;
    for ( ; step; step/= 2 ) {
        if ( check( sol+step ) ) {
            sol+= step;
        }
    }
    fout<<sol+1<<"\n";
    
    return 0;
}