Pagini recente » Cod sursa (job #1376571) | Cod sursa (job #132260) | Cod sursa (job #262439) | Cod sursa (job #1780688) | Cod sursa (job #816633)
Cod sursa(job #816633)
#include<stdio.h>
long long l1,l2,x,cat;
int v[110001],n,p,c,pp,i,j,d,pp2;
int main()
{
freopen("frac.in","r",stdin);
freopen("frac.out","w",stdout);
scanf("%d%d",&n,&p);
c=0;d=2;
while(n!=1)
{pp=0;
while(n%d==0)
{n/=d;pp=1;}
if(pp==1)
{c++;v[c]=d;}
d++;
}
l1=1;
l2=(long long)1<<61;
pp=0;
while(l1<l2&&pp==0)
{x=(l1+l2)/2;
//aflu al-cate-lea este x
cat=x;
pp2=1;
for(i=1;i<=c;i++)
{cat=cat-(x/v[i]);
if(x%v[i]==0)
pp2=0;
}
for(i=1;i<c;i++)
for(j=i+1;j<=c;j++)
cat=cat+(x/(v[i]*v[j]));
if(cat==p)
if(pp2==1)
pp=1;
else
l2=x;
else
if(p<cat)
{l2=x;}
else
l1=x;
}
printf("%lld",x);
return 0;
}