Cod sursa(job #368679)

Utilizator Cristi09Cristi Cristi09 Data 25 noiembrie 2009 14:23:44
Problema Frac Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<stdio.h>
long long n,p,per,lo=0,hi,mid,var;
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();
   //		int var=1;
   //for(int i=0;var<20;++i)
   //if(verif(i)){printf("%d %d\n",var,i);++var;}
   //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,x=n;
   for(i;x>1;++i)
	 if(verif(i))
	 {
	   ++per;
	   while(x%i==0)x/=i;
	 }
}
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=1;
	var=0;
	for(sd;sd>1&&contor<=p;--sd)
	if(verif(sd))
	{++contor;if(!var)var=sd;}

	return contor;
}
long long cautbin()
{
   lo=0;hi=1200000000;
   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;
}