Pagini recente » Cod sursa (job #1372733) | Cod sursa (job #2783325) | Cod sursa (job #751769) | Cod sursa (job #47769) | Cod sursa (job #460095)
Cod sursa(job #460095)
#include <stdio.h>
#include <string.h>
#define NMAX 71
#define LMAX 131
#define HMAX 100005
#define ll long long
int n,A[NMAX][NMAX][NMAX];
int divs[LMAX];
ll rez,C[LMAX];
struct triplet
{
int a,b,c;
};
triplet B[HMAX];
void read()
{
scanf("%d",&n);
int i;
for (i=1; i<=n; i++)
scanf("%d%d%d",&B[i].a,&B[i].b,&B[i].c);
}
void clear_data()
{
memset(A,0,sizeof(A));
/*int i,j,k;
for (i=0; i<NMAX; i++)
for (j=0; j<NMAX; j++)
for (k=0; k<NMAX; k++)
A[i][j][k]=0;*/
}
void prepare()
{
int i,j,k,t,a,b,c;
for (i=2; i<LMAX; i++)
{
clear_data();
for (j=1; j<=n; j++)
A[B[j].a%i][B[j].b%i][B[j].c%i]++;
for (j=0; j<NMAX && j<i; j++)
for (k=0; k<NMAX && j<i; k++)
for (t=0; t<NMAX && t<i; t++)
{
a=(i-j)%i; b=(i-k)%i; c=(i-t)%i;
if (j==a && k==b && t==c)
C[i]+=(ll)A[j][k][t]*(A[j][k][t]-1)/2;
else
C[i]+=(ll)A[j][k][t]*A[a][b][c]/2;
}
}
}
void prepare2()
{
int i,j;
for (i=2; i<LMAX; i++)
if (!divs[i])
{
for (j=i*i; j<LMAX; j+=i*i)
divs[j]=-1;
for (j=i; j<LMAX; j+=i)
if (divs[j]>=0)
divs[j]++;
}
for (i=2; i<LMAX; i++)
if (divs[i] & 1)
rez+=C[i];
else
rez-=C[i];
}
int main()
{
freopen("puteri.in","r",stdin);
freopen("puteri.out","w",stdout);
read();
prepare();
prepare2();
printf("%lld\n",rez);
return 0;
}