Pagini recente » Cod sursa (job #2264636) | Cod sursa (job #1439044) | Cod sursa (job #1518841) | Monitorul de evaluare | Cod sursa (job #214487)
Cod sursa(job #214487)
#include<stdio.h>
#include<string.h>
struct mmmmm{
int x,y,z;
}nr[100100];
int diviz[130],N,so;
int a[130][130][130];
void divizor(){
int i,j,n=129;
for(i=2;i<n;++i){
if(!diviz[i])
for(j=i;j<n;j+=i){
++diviz[j];
if(j%(i*i)==0)
diviz[j]=-100000;
}
}
}
void calc(int p){
int i;
for(i=0;i<N;++i)
++a[nr[i].x%p][nr[i].y%p][nr[i].z%p];
}
int proces(int p){
int i,j,k,sol=0;
for(i=0;i<(p+1)/2;++i){
for(j=0;j<p;++j){
for(k=0;k<p;++k){
if(i==(p-i)%p && j==(p-j)%p && k==(p-k)%p)
sol+=(a[i][j][k]*(a[i][j][k]-1))/2;
else
sol+=a[i][j][k]*a[(p-i)%p][(p-j)%p][(p-k)%p];
}
}
}
if(p%2)
return sol;
for(j=0;j<=p/2;++j){
for(k=0;k<=p/2;++k){
if(i==(p-i)%p && j==(p-j)%p && k==(p-k)%p)
sol+=(a[i][j][k]*(a[i][j][k]-1))/2;
else
sol+=a[i][j][k]*a[(p-i)%p][(p-j)%p][(p-k)%p];
}
}
return sol;
}
void init()
{
for(int i=0;i<130;++i)
for(int j=0;j<130;++j)
for(int k=0;k<130;++k)
a[i][j][k]=0;
}
int main(){
freopen("puteri.in","r",stdin);
freopen("puteri.out","w",stdout);
int i;
scanf("%d",&N);
for(i=0;i<N;++i)
scanf("%d%d%d",&nr[i].x,&nr[i].y,&nr[i].z);
divizor();
for(i=2;i<=128;++i){
if(diviz[i]>=0){
//memset(a,0,sizeof(a));
init();
calc(i);
if(diviz[i]%2)
so+=proces(i);
else
so-=proces(i);
}
}
printf("%d\n",so);
fclose(stdin);
fclose(stdout);
return 0;
}