Pagini recente » Cod sursa (job #1481109) | Cod sursa (job #2711547) | Cod sursa (job #2598527) | Cod sursa (job #2205396) | Cod sursa (job #2661321)
#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;
}