Pagini recente » Cod sursa (job #575018) | Cod sursa (job #777379) | Cod sursa (job #1132228) | Cod sursa (job #2340063) | Cod sursa (job #598217)
Cod sursa(job #598217)
#include <fstream>
using namespace std;
int p, q;
int fp[50], pt[50], l = 0;
void getFact()
{ int i;
for(i = 2; i * i <= p; ++i)
if(p % i == 0)
{ fp[++l] = i;
while(p % i == 0){ p /= i; ++pt[l]; }
pt[l] *= q;
}
if(p != 1)
{ fp[++l] = p;
pt[l] = q;
}
}
bool ok(long long b)
{ long long i, nr, s;
for(i = 1; i <= l; ++i)
{ nr = 0; s = b;
while(s)
{ nr += s / fp[i];
s /= fp[i];
}
if(nr < pt[i]) return 0;
}
return 1;
}
long long cauta()
{ long long i, rez = (long long)1 << 60;
for(i = (long long)1 << 60; i; i >>= 1)
if(ok(rez - i)) rez -= i;
return rez;
}
int main()
{ ifstream f("gfact.in");
ofstream g("gfact.out");
f >> p >> q;
getFact();
g << cauta() << '\n';
g.close();
return 0;
}