Pagini recente » Cod sursa (job #1758703) | Cod sursa (job #1919817) | Cod sursa (job #2823384) | Cod sursa (job #165805) | Cod sursa (job #1154131)
#include <fstream>
#include <vector>
using namespace std;
ifstream is("gfact.in");
ofstream os("gfact.out");
#define ll long long
vector<pair<int,int> > Factor;
ll P, Q;
void FactorizeP();
void BinarySearch();
bool Check(int x);
int main()
{
is >> P >> Q;
FactorizeP();
BinarySearch();
is.close();
os.close();
return 0;
}
void FactorizeP()
{
ll base, exp;
ll aux = P;
for ( int i = 2; i * i <= P; ++i )
{
if ( P % i == 0 )
{
base = i;
exp = 0;
while ( P % i == 0 )
exp++,P/=i;
Factor.push_back(make_pair(base,exp));
}
}
if ( P > 1)
Factor.push_back(make_pair(P,1));
}
void BinarySearch()
{
ll i, Step;
for ( Step = 1; Step <= 600000000; Step <<= 1 );
for ( ; Step; Step /= 2)
if (i + Step <= 600000000 && Check(i+Step) == false )
i += Step;
os << i+1;
}
bool Check(int x)
{
ll aux2;
ll aux3;
for ( int i = 0; i < Factor.size() ; ++i )
{
aux2 = Factor[i].first;
aux3 = 0;
while ( x >= aux2 )
{
aux3 += x/aux2;
aux2 *= Factor[i].first;
}
if ( aux3 < Factor[i].second * Q )
return false;
}
return true;
}