Cod sursa(job #413370)

Utilizator feelshiftFeelshift feelshift Data 8 martie 2010 13:29:58
Problema Fractii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
// http://infoarena.ro/problema/fractii

#include <stdio.h>
long long count,n,i,k,e,x,p,ok,max,stack[1000000],poz = 1,found = true;

FILE * in = fopen("fractii.in","rt");
FILE * out = fopen("fractii.out","wt");

int main()
{
     fscanf(in,"%d",&n);
     
/*********** Ciurul lui Erathostene **************/     
     for(i=1;i<=n;i++)
	  stack[i] = i;
     
     do
     {
	  found = false;
	  
	  do
	       x = p = stack[++poz];
	  while(x == 0 || poz == n);
	  
	  do
	  {
	       p = p + x;
	       if(stack[p] != 0)
	       {
		    stack[p] = 0;
		    found = true;
	       }
	  }
	  while(p <= n);
     }
     while( found == true);
/*************************************************/
     
     
     for(i=1;i<=n;i++)
	  for(k=1;k<=n;k++)
	  {
	       ok = true;
	       
	       if(i == k && i != 1)
		    ok = false;
	       
	       if(ok == true)
		    if(stack[i] == 0 || stack[k] == 0)
		    {
			 if(i % k == 0 && k != 1)
			      ok = false;
			 if(k % i == 0 && i != 1)
			      ok = false;
		    }

	       if(ok == true && stack[i] == 0 && stack[k] == 0)
	       {
		    if(i > k)
			 max = i;
		    else
			 max = k;
			      
		    for(e=2;e<=max/2;e++)
			 if(k % e == 0 && i % e == 0)
			 {
			      ok = false;
			      break;
			 }
	       }
	       
	       if(ok == true)
		    count++;
	  }
     
     fprintf(out,"%I64d\n",count);
     
     return (0);
     
}