Pagini recente » Cod sursa (job #1858277) | Cod sursa (job #1517779) | Cod sursa (job #1859648) | Cod sursa (job #1947033) | Cod sursa (job #1313503)
#include <cstdio>
#include <fstream>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
int p,q;
int d[100],e[100],nr;
long long t[100],sol;
void desc(int a)
{
int i=2;
while (a!=1) {
if (a%i==0) {
d[++nr]=i;
e[nr]=1;
a/=i;
while (a%i==0) {
a/=i;
e[nr]++;
}
}
else if (i*i>a) {
d[++nr]=a;
e[nr]=1;
a=1;
}
i++;
}
}
bool trying(long long a)
{
int i,j;
long long x,y;
for (i=1;i<=nr;i++)
t[i]=0;
for (i=1;i<=nr;i++) {
x=1;
y=-1;
while (x<=a){
x*=1LL*d[i];
y=1LL*a/x;
t[i]+=y;
}
}
for (i=1;i<=nr;i++) if (t[i]<e[i]) return false;
return true;
}
int main()
{
int i,j;
f>>p>>q;
desc(p);
for (i=1;i<=nr;i++)
e[i]*=q;
long long st=1,dr=1LL*(1<<28)*(1<<28),mid;
while (st<=dr) {
mid=(st+dr)>>1;
if (trying(mid)==true) {
dr=mid-1;
sol=mid;
}
else st=mid+1;
}
g<<sol;
return 0;
}