Pagini recente » Cod sursa (job #2513979) | Cod sursa (job #1376069) | Cod sursa (job #1857746) | Cod sursa (job #2469852) | Cod sursa (job #1464098)
#include <fstream>
using namespace std;
long long powerInFact(long long number, long long div)
{
long long i = div;
long long result = 0;
while(i <= number)
{
result += number / i;
i *= div;
}
return result;
}
long long minFact(long long nr, long long power)
{
long long left = 1 , right = power, mid;
long long pow;
while(left < right)
{
mid = (left + right) / 2;
pow = powerInFact(mid * nr, nr);
if(pow < power)
left = mid + 1;
else
right = mid;
}
return right * nr;
}
long long maxFact(long long p, long long q)
{
long long power;
long long maxNr = 0;
long pp = p;
for(int i = 2; p > 1 && i * i <= pp ; i++)
{
if(p % i == 0)
{
power = 0;
while(p % i == 0)
{
power++;
p /= i;
}
maxNr = max(maxNr, minFact(i, power * q));
}
}
if(p > 1)
maxNr = minFact(p, q);
return maxNr;
}
int main()
{
int p, q;
ifstream f("gfact.in");
f >> p >> q;
f.close();
ofstream g("gfact.out");
g << maxFact(p, q) << '\n';
g.close();
return 0;
}