Pagini recente » Cod sursa (job #2267241) | Cod sursa (job #2617584) | Cod sursa (job #2115261) | Cod sursa (job #1777510) | Cod sursa (job #1722353)
#include <iostream>
#include<fstream>
#include<cmath>
#include<climits>
using namespace std;
unsigned long long a,b,d[105],p[105],k,fix,i,c,num,y;
long long pr,u,m;
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+=2;
if(c>=fix) c=a;
}
}
bool check(long long x)
{
for(i=1;i<=k;i++)
{
num=0;y=d[i];
while(y<=x)
{
num+=x/y;
y*=d[i];
}
if(num<p[i]) 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[i]*=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;
}