Pagini recente » Cod sursa (job #2593416) | Cod sursa (job #1624720) | Cod sursa (job #877655) | Cod sursa (job #2060328) | Cod sursa (job #2528662)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int factpr[50];
int puteri[50];
int f=0;
long long putere(long long n, int d)
{
long long sum = 0;
while (n >= d)
{
sum += n/d;
n /= d;
}
return sum;
}
bool ok(long long n)
{
long long a, b, p, put=0;
bool k=true;
for(int i=1; i<=f; i++)
{
if(putere(n, factpr[i])<puteri[i])
return false;
}
return true;
}
int main()
{
FILE *fin, *fout;
fin=fopen("gfact.in", "r");
fout=fopen("gfact.out", "w");
long long p, q, e;
fscanf(fin, "%lld%lld", &p, &q);
for(int i=2; i*i<=p; i++)
{
e=0;
while(p%i==0)
{
p/=i;
e++;
}
if(e!=0)
{
f++;
factpr[f]=i;
puteri[f]=e;
}
}
if(p!=1)
{
f++;
factpr[f]=p;
puteri[f]=1;
}
for(int i=1; i<=f; i++)
{
puteri[i]*=q;
//printf("%d %d\n", factpr[i], puteri[i]);
}
long long st=1, dr=60000000000000LL, mij;
while(st<dr)
{
mij=(st+dr)/2;
if(ok(mij))
{
dr=mij;
}
else
{
st=mij+1;
}
}
printf("%lld", st);
fclose(fin);
fclose(fout);
return 0;
}