Pagini recente » Cod sursa (job #941537) | Cod sursa (job #1066644)
#include <fstream>
#include <vector>
#define PII pair<int, int>
#define x first
#define y second
using namespace std;
const long long N=1LL<<60;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int p, q;
vector <PII> fact;
bool verif(long long n)
{
long long a, b;
for(auto i: fact)
{
for(a=i.x, b=0;a<=n;a*=i.x) b+=n/a;
if(b<i.y) return 0;
}
return 1;
}
long long bs()
{
long long i, step;
for(step=1;step<N;step<<=1);
for(i=N;step;step>>=1)
{
if(i-step>0&&verif(i-step)) i-=step;
}
return i;
}
int main()
{
int i, k;
fin>>p>>q;
for(i=2;i*i<=p;i++)
{
if(p%i==0)
{
k=0;
while(p%i==0)
{
k++;
p/=i;
}
fact.push_back(make_pair(i, k*q));
}
}
if(p>1) fact.push_back(make_pair(p, q));
fout<<bs();
}