Cod sursa(job #27338)

Utilizator pocaituDavid si Goliat pocaitu Data 6 martie 2007 12:37:37
Problema Puteri Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<stdio.h>
#include<math.h>
#include<fstream.h>
#define nm 130
#define nmax 100005
#define fin "puteri.in"
#define fout "puteri.out"
unsigned int nr[nm][nm][nm],a[nmax],b[nmax],c[nmax];
int long n;
long long sol;
void rezolva()
{int long d,i1,k,i,p;
 for(i=2;i<=nm-2;i++)
   {i1=i;
   for(d=2,k=0,p=1;d<=sqrt(i1);d++)
	if(!(i1%d))
	  {i1/=d;
	   if(!(i1%d))
		 {p=0;
		  break;
		  }
	   k++;
	   }
   if(i1>1)
	 k++;
   if(p)
	{//aflu restul impartirii la i
	 //memset(nr,0,sizeof(nr));
	 if(k%2)
	 for(d=1;d<=n;d++)
	   {sol+=nr[(i-a[d]%i)%i][(i-b[d]%i)%i][(i-c[d]%i)%i];
		nr[a[d]%i][b[d]%i][c[d]%i]++;
		}
	 else
	  for(d=1;d<=n;d++)
	   {sol-=nr[(i-a[d]%i)%i][(i-b[d]%i)%i][(i-c[d]%i)%i];
		nr[a[d]%i][b[d]%i][c[d]%i]++;
		}
	 for(d=1;d<=n;d++)
	   {//sol+=nr[(i-a[d]%i)%i][(i-b[d]%i)%i][(i-c[d]%i)%i];
		nr[a[d]%i][b[d]%i][c[d]%i]=0;
		}


	  }
   }


}










int main()
{int long i;
 freopen(fin,"r",stdin);
 scanf("%ld",&n);
 for(i=1;i<=n;i++)
  scanf("%u%u%u",&a[i],&b[i],&c[i]);
 rezolva();
 freopen(fout,"w",stdout);
 printf("%lld",sol);
 fclose(stdout);
 return 0;
 }