Pagini recente » Cod sursa (job #1264121) | Diferente pentru runda/viata_periculoasa_pe_infoarena intre reviziile 5 si 6 | Istoria paginii runda/oni11/clasament | Istoria paginii runda/simulareojiclasa7/clasament | Cod sursa (job #214480)
Cod sursa(job #214480)
#include<stdio.h>
#include<string.h>
struct{
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/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];
}
}
}
return sol;
}
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));
calc(i);
if(diviz[i]%2)
so+=proces(i);
else
so-=proces(i);
}
}
printf("%d\n",so);
fclose(stdin);
fclose(stdout);
return 0;
}