Cod sursa(job #368377)

Utilizator Cristi09Cristi Cristi09 Data 24 noiembrie 2009 19:41:49
Problema Frac Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
long long n,p,a[1000],ind=0,per,lo=0,hi,mid;
void getdiv();
void detper();
int verif(long long x);
long long cautbin();
int main()
{
   FILE*f=fopen("frac.in","r");
   fscanf(f,"%lld%lld",&n,&p);
   fclose(f);

   getdiv();
   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 getdiv()
{
   long long x=n,i=2;

   for(i;x>1;++i)
	  if(x%i==0)
	  {
		a[ind]=i;
		++ind;
		while(x%i==0)x/=i;
	  }
}
void detper()
{
   per=1;
   long long i=2;
   for(i;i<n;++i)
	 if(verif(i))++per;
}
int verif(long long x)
{
   long long i;
   int ok=1;
   for(i=0;i<ind&&ok;++i)
   if(x%a[i]==0)ok=0;

   return ok;
}
long long cautbin()
{
   hi=lo+n;

   while(per>1)
   {
	 mid=lo+(hi-lo)/2;
	 per/=2;

	 if(p<=per)hi=mid-1;
	 else lo=mid+1;
   }
   int ok=0;
   for(lo;lo<=hi&&!ok;++lo)
   if(verif(lo))ok=1;

   return lo-1;
}