Pagini recente » Cod sursa (job #2921391) | Cod sursa (job #2719095) | Monitorul de evaluare | Istoria paginii utilizator/jtamme | Cod sursa (job #214799)
Cod sursa(job #214799)
#include<stdio.h>
#include<string.h>
#define N 100010
#define MAX 130
struct triplet
{
int x,y,z;
};
int n;
triplet v[N];
int mod[MAX][MAX],nrd[MAX];
long long a[MAX][MAX][MAX];
void citire()
{
scanf("%d",&n);
for(int i=0 ; i<n ; ++i)
scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].z);
}
void init_mod()
{
for(int i=0;i<MAX;++i)
for(int j=1;j<MAX;++j)
mod[i][j]=i%j;
}
void init_d()
{
for(int i=2;i<MAX;++i)
if(nrd[i]==0)
for(int j=i;j<MAX;j+=i)
++nrd[j];
for(int i=2;i<MAX;++i)
if(nrd[i]==1)
{
int k=i*i;
for(int j=k;j<MAX;j+=k)
nrd[j]=0;
}
}
inline long long comb(long long n)
{
return n*(n-1);
}
void init_a(int p)
{
memset(a,0,sizeof(a));
for(int i=0;i<n;++i)
++a[mod[v[i].x][p]][mod[v[i].y][p]][mod[v[i].z][p]];
}
long long calcul_p(int p)
{
long long s=0;
for(int i=0;i<p;++i)
for(int j=0;j<p;++j)
for(int k=0;k<p;++k)
if(i==mod[p-i][p] && j==mod[p-j][p] && k==mod[p-k][p])
s+=comb(a[i][j][k]);
else
s+=a[i][j][k]*a[mod[p-i][p]][mod[p-j][p]][mod[p-k][p]];
if(nrd[p]&1)
return s>>1;
return -(s>>1);
}
long long calcul()
{
long long sol=0;
for(int i=2;i<MAX;++i)
{
init_a(i);
if(nrd[i])
sol+=calcul_p(i);
}
return sol;
}
int main()
{
freopen("puteri.in","r",stdin);
freopen("puteri.out","w",stdout);
init_mod();
init_d();
citire();
printf("%lld\n",calcul());
return 0;
}