Pagini recente » Cod sursa (job #2147955) | Cod sursa (job #2261906) | Cod sursa (job #1626619) | Cod sursa (job #2818871) | Cod sursa (job #1722343)
#include <iostream>
#include<fstream>
#include<cmath>
#include<climits>
using namespace std;
long long a,b,d[105],p[105],pr,u,m,k,fix,i,c,num,y;
void desc()
{
if(a%2==0)
{
k=1;d[k]=2;
while(a%2==0)
{a/=2;p[k]++;}
}
c=3;
fix=floor(sqrt(a));
while(a!=1)
{
if(a%c==0)
{
k++;
d[k]=c;
while(a%c==0)
{
a/=c;
p[k]++;
}
}
c++;
if(c>=fix) c=a;
}
}
bool check(long long x)
{
for(i=1;i<=k;i++)
{
num=0;y=d[k];
while(y<=x)
{
num+=x/y;
y*=d[k];
}
if(num<p[k]) return false;
}
return true;
}
int main()
{
ifstream f("gfact.in");
ofstream g("gfact.out");
f>>a>>b;
desc();
for(i=1;i<=k;i++)
p[k]*=b;
pr=0;
u=LLONG_MAX;
while(u-pr>1)
{
m=pr+(u-pr)/2;
if(check(m)) u=m;
else pr=m;
}
if(!check(u)) u--;
g<<u;
return 0;
}