Pagini recente » Cod sursa (job #3231462) | Cod sursa (job #2474393) | Cod sursa (job #1439908) | Cod sursa (job #992626) | Cod sursa (job #2661323)
#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 st = 0, dr = (long long) 60000000000000, 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;
for ( div = 2; div * div <= p; div++ )
if ( p % div == 0 ) {
d[nrdivprimi] = div;
while ( p % div == 0 ) {
e[nrdivprimi]++;
p /= div;
}
e[nrdivprimi++] *= q;
}
if ( p > 1 ) {
d[nrdivprimi] = p;
e[nrdivprimi++] = q;
}
fout << cautbin();
return 0;
}