Cod sursa(job #368360)

Utilizator Cristi09Cristi Cristi09 Data 24 noiembrie 2009 19:28:44
Problema Frac Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 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,"%d%d",&n,&p);
   fclose(f);

   getdiv();
   detper();

   while(p>per)
   {p-=per;lo+=n;}

   FILE*g=fopen("frac.out","w");
   fprintf(g,"%d",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(per==1)continue;
	 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;
}