Cod sursa(job #484743)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 15 septembrie 2010 18:09:42
Problema Puteri Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#define Nmax 100002
#define Vmax 64+64+1
#define Rmax 65

int a[Nmax],b[Nmax],c[Nmax];
int p[Vmax],prim[Vmax],Nr[Vmax];
int r[Rmax][Rmax][Rmax],uzz[Rmax][Rmax][Rmax];
int N,z;

void ciur(){
	int i,j;
	for(i=2;i<Vmax;++i)
		if( p[i]==0 ){
			prim[++z]=i;
			for(j=i; j<Vmax; j+=i)
				++p[j];
			for(j=i*i; j<Vmax; j+=i*i)
				p[j]=-1;
		}
}

int main(){
	int i,j,i1,j1,k1,aa,bb,cc,nr,rez=0,cine;
	freopen("puteri.in","r",stdin);
	freopen("puteri.out","w",stdout);
	scanf("%d",&N);
	for(i=1;i<=N;++i) scanf("%d%d%d",&a[i],&b[i],&c[i]);
	
	ciur();
	
	for(i=2;i<Rmax;++i){
		
		for(i1=0;i1<i;++i1)
			for(j1=0;j1<i;++j1)
				for(k1=0;k1<i;++k1)
					r[i1%i][j1%i][k1%i]=0, uzz[i1%i][j1%i][k1%i]=0;
				
				
		for(j=1;j<=N;++j)
			++r[a[j]%i][b[j]%i][c[j]%i];
		
		for(j=1;j<=N;++j)
			if( ! uzz[a[j]%i][b[j]%i][c[j]%i] ){
				aa=a[j]%i; bb=b[j]%i; cc=c[j]%i;
				uzz[aa][bb][cc]=1;
				uzz[(i-aa)%i][(i-bb)%i][(i-cc)%i]=1;
				
				if( aa==(i-aa)%i && bb==(i-bb)%i && cc==(i-cc)%i )
					Nr[i] += r[aa][bb][cc]*(r[aa][bb][cc]-1)/2;
				else Nr[i] += r[aa][bb][cc]*r[(i-aa)%i][(i-bb)%i][(i-cc)%i];
			}
	}
	
	for(i=2; i<Vmax; ++i)
		if(p[i] != -1 )
		if( p[i] & 1) rez += Nr[i];
		else rez -= Nr[i];

	
	printf("%d\n",rez);
	fclose(stdin); fclose(stdout);
	return 0;
}