Cod sursa(job #368686)

Utilizator Cristi09Cristi Cristi09 Data 25 noiembrie 2009 14:38:46
Problema Frac Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#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();
   lo+=n*(p/per);

   while(p>per)
   {p-=per;}

   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;
}