Cod sursa(job #519953)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define ll long long
#define pii pair < pair < int , int > , int>
#define x first.first
#define y first.second
#define z second
pii q[100006];
int f[72][72][72],n;
int nrd[134],viz[134];
ll sol,s;
int main ()
{
int i,j,p,r1,r2,r3;
freopen("puteri.in","r",stdin);
freopen("puteri.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d%d%d",&q[i].x,&q[i].y,&q[i].z);
for(i=2;i<=128;i++)
{
for(j=i*i;j<=128;j+=i*i)
viz[j]=1;
if(!nrd[i])
for(j=i;j<=128;j+=i)
nrd[j]++;
}
for(p=2;p<=128;p++)
if(!viz[p])
{
sol=0;
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)
{
r1=q[i].x%p;
r2=q[i].y%p;
r3=q[i].z%p;
if(!r1) r1=p;
if(!r2) r2=p;
if(!r3) r3=p;
if(p-r1<65 && p-r2<65 && p-r3<65)
sol+=f[p-r1][p-r2][p-r3];
if(r1==p) r1=0;
if(r2==p) r2=0;
if(r3==p) r3=0;
f[r1][r2][r3]++;
}
if(nrd[p]&1)
s+=sol;
else
s-=sol;
}
printf("%lld\n",s);
return 0;
}