Pagini recente » Cod sursa (job #2334123) | Cod sursa (job #2592616) | Cod sursa (job #1031823) | Cod sursa (job #1521460) | Cod sursa (job #3191899)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
#define DR (1LL << 46)
long long d[100001],p[100001],ct,y;
long long putere(long long n, int d)
{
long long nr = 0;
while (n >= d)
{
nr += (n /= d);
}
return nr;
}
bool se_divide(long long n)
{
for (int i=1; i<=ct; i++){
long long p_fact = putere(n, d[i]);
if (p_fact < p[i] * y)
return false;}
return true;
}
int main()
{
long long x;
fin>>x>>y;
long long a=2,b;
while(x>a*a)
{
b = 0;
while(x % a == 0)
{
++b;
x /= a;
}
if(b)
{
ct++;
d[ct]=a;
p[ct]=b;
}
++ a;
}
if (x)
{
ct++;
d[ct]=x;
p[ct]=1;
}
long long st=1,dr=DR,rez=dr+1;
while (st <= dr)
{
long long m = (st + dr) / 2;
if (se_divide(m))
{
rez = m;
dr = m - 1;
}
else
{
st = m + 1;
}
}
fout<<rez;
return 0;
}