Pagini recente » Cod sursa (job #2941864) | Cod sursa (job #1259836) | Cod sursa (job #2799136) | Cod sursa (job #2842546) | Cod sursa (job #1804263)
#include <stdio.h>
#include <stdlib.h>
char v[45000][2];
inline long long int nrdiv(long long int n,long long int k)
{
long long int s=0;
while(n>0)
{
s+=n/k;
n=n/k;
}
return s;
}
long long int desc(int n)
{
int d=2,k=0;
while(n>1)
{
if(n%d==0)
{
n=n/d;
if(v[k][1]==0)
v[k][0]=d;
v[k][1]++;
}
else
{
d++;
if(n%d==0 && v[k][1]!=0)
k++;
}
}
return k;
}
int main()
{
long long int z,q,p=1,r=0,n,x,i;
FILE*fi,*fo;
fi=fopen("gfact.in","r");
fo=fopen("gfact.out","w");
fscanf(fi,"%lld%lld",&z,&q);
n=desc(z);
p=p<<30;
while(p>0)
{
x=0;
for(i=0; i<=n; i++)
{
if(nrdiv(r+p,v[i][0])>v[i][1]*q && nrdiv(r+(p/2),v[i][0])>v[i][1]*q)
x=1;
}
if(x==0)
r+=p;
p/=2;
}
x=0;
while(x==0)
{
r++;
for(i=0;i<=n;i++)
if(nrdiv(r,v[i][0])>=v[i][1]*q){
x=1;}
}
x=0;
while(x==0)
{
r--;
for(i=0; i<=n; i++)
{
if(nrdiv(r,v[i][0])<v[i][1]*q)
x=1;
}
}
r++;
fprintf(fo,"%lld",r);
fclose(fi);
fclose(fo);
return 0;
}