Pagini recente » Cod sursa (job #146710) | Cod sursa (job #2239810) | Cod sursa (job #835908) | Argumentatia | Cod sursa (job #2796215)
#include <bits/stdc++.h>
#define N 2008
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
long long p, q;
vector< pair<long long, long long> > f;
void Citire()
{
fin >> p >> q;
}
long long howMany( long long b )
{
for( auto x : f )
{
long long sol = 0, p = x.first;
while( p <= b )
{
sol += b / p;
p *= x.first;
}
if( sol < x.second )
return 0;
}
return 1;
}
long long CB()
{
long long st, dr;
long long mid;
long long sol = 0;
st = 0;
dr = p * q;
while( st <= dr )
{
mid = ( st + dr ) / 2;
if( howMany(mid) )
sol = mid,
dr = mid - 1;
else
st = mid + 1;
}
return sol;
}
void Rezolvare()
{
long long d, ct = 0;
d = 2;
long long P;
P = p;
while( p > 1 )
{
ct = 0;
while( p % d == 0 )
{
p /= d;
ct++;
}
if( ct != 0 )
f.push_back( { d, ct * q } );
if( d > 2 ) d += 2;
else d = 3;
if( d * d > p )
d = p;
}
p = P;
fout << CB();
}
int main()
{
Citire();
Rezolvare();
return 0;
}