Pagini recente » Rating Ruxandra Simion (ruxysimion) | Cod sursa (job #3294039) | Cod sursa (job #2969031) | Cod sursa (job #865579) | Cod sursa (job #1101841)
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
FILE *in,*out;
long long p;
long long nrzero(long long val,long long val2)
{
long long rez=0;
do
{
val/=val2;
rez+=val;
} while (val/val2!=0);
return rez;
}
long long cb(long val3)
{
long long st=1,dr,val,med;
dr=(long long )1<<62;
while (st<=dr)
{
med=dr-(dr-st)/2;
val=nrzero(med,val3);
if (val>=p)
dr=med-1;
else
st=med+1;
}
val=nrzero(med,val3);
if (val<p)
{
med++;
val=nrzero(med,val3);
}
if (val>=p)
return med;
else
return -1;
}
int main()
{
long long n=0,n2,nr,i,max2=0;
in=fopen("gfact.in","rt");
fscanf(in,"%lld %lld",&n,&p);
fclose(in);
n2=n;
if (n%2==0)
{
nr=0;
while (n%2==0)
n/=2,nr++;
p*=nr;
max2=max(max2,cb(2));
p/=nr;
}
for (i=3;i<=n2/2;i+=2)
if (!(n%i))
{
nr=0;
while (n%i==0)
n/=i,nr++;
p*=nr;
max2=max(max2,cb(i));
p/=nr;
}
out=fopen("gfact.out","wt");
fprintf(out,"%lld",max2);
fclose(out);
return 0;
}