Pagini recente » Cod sursa (job #2791423) | Cod sursa (job #567729) | Cod sursa (job #2075348) | Cod sursa (job #1152462) | Cod sursa (job #2661309)
#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;
}