Pagini recente » Cod sursa (job #248724) | Cod sursa (job #2392133) | Cod sursa (job #1507963) | Cod sursa (job #352421) | Cod sursa (job #2074128)
#include <fstream>
using namespace std;
ifstream in ("gfact.in");
ofstream out ("gfact.out");
const int N=300;
int divz[N],exp[N],q;
long long n;
long long putere(long long b, int d)
{
long long s=0;
while (b>=d)
s+=(b/=d);
return s;
}
int sepoate(long long x)
{
int i;
for (i=1;i<=n;i++)
if ( putere(x,divz[i]) < exp[i]*q )
return 0;
return 1;
}
int main()
{
int p,i;
long long r=0,pas=1LL<<60;
in>>p>>q;
for (i=2;i*i<=p;i++)
if (p%i==0)
{
n++, divz[n]=i;
while (p%i==0)
p/=i, exp[n]++;
}
if (p>1)
n++, divz[n]=p, exp[n]++;
while (pas)
{
if (sepoate(r+pas)==0)
r+=pas;
pas/=2;
}
out<<r+1;
return 0;
}