Cod sursa(job #25393)

Utilizator C_OvidiuCotletz Ovidiu C_Ovidiu Data 4 martie 2007 12:26:03
Problema Puteri Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasa a 10-a Marime 1.06 kb
#include<stdio.h>
#include<math.h>
#include<fstream.h>
#define inmax 64000
#define amax 62
#define prmax 19
#define fin "puteri.in"
#define fout "puteri.out"

unsigned int t[amax][amax][amax][prmax],prim[21];
long long nr=0;
int long n,cc[prmax];

void primi()
{float rad;
 int i,d,p;
 for(i=2;i<=64;i++)
	{for(d=2,p=1,rad=sqrt(i);d<=rad;d++)
	  if(!(i%d))
		p=0;
	 if(p)
	   prim[++prim[0]]=i;
	  }
 }
void citeste_rez()
{int a,b,c,d;
 int long i,r;
 freopen(fin,"r",stdin);
 scanf("%ld",&n);
 for(i=1;i<=n;i++)
  {scanf("%d%d%d",&a,&b,&c);
   for(d=1;d<=prim[0];d++)
	 {r=t[(prim[d]-a%prim[d])%prim[d]][(prim[d]-b%prim[d])%prim[d]][(prim[d]-c%prim[d])%prim[d]][d-1];
	  nr+=r;
	  if(r==inmax)
		nr+=cc[d-1];
	  }

   for(d=1;d<=prim[0];d++)
	 {if(t[a%prim[d]][b%prim[d]][c%prim[d]][d-1]==inmax)
		cc[d-1]++;
	  else
		t[a%prim[d]][b%prim[d]][c%prim[d]][d-1]++;
	  }
   }
 }


void afiseaza()
{freopen(fout,"w",stdout);
 printf("%lld",nr);
 fclose(stdout);
 }


int main()
{primi();
 citeste_rez();
 afiseaza();
 return 0;
 }