Pagini recente » Cod sursa (job #897205) | Cod sursa (job #911396) | Cod sursa (job #2889736) | Cod sursa (job #174997) | Cod sursa (job #368688)
Cod sursa(job #368688)
#include<stdio.h>
long long n,p,per,lo=0,hi,mid,var,in;
void detper();
int verif(long long x);
long long det();
long long cautbin();
int main()
{
FILE*f=fopen("frac.in","r");
fscanf(f,"%lld%lld",&n,&p);
fclose(f);
detper();
while(p>per)
{p-=per;lo+=n;}
FILE*g=fopen("frac.out","w");
fprintf(g,"%lld",cautbin());
fclose(g);
return 0;
}
void detper()
{
per=1;
long long i=2;
for(i;i<n;++i)
if(verif(i))
++per;
}
int verif(long long x)
{
long long a,b,r;
a=n;
b=x;
r=a%b;
while(r)
{
a=b;b=r;r=a%b;
}
if(b>1)return 0;
else return 1;
}
long long det()
{
long long sd=mid,contor=0;
var=0;
for(sd;sd>=in&&contor<=p;--sd)
if(verif(sd))
{++contor;if(!var)var=sd;}
return contor;
}
long long cautbin()
{
hi=lo+n;in=lo;
long long q;
while(lo<=hi)
{
mid=lo+(hi-lo)/2;
q=det();
if(q==p)lo=hi+1;
if(q>p)hi=mid-1;
if(q<p)lo=mid+1;
}
return var;
}