Pagini recente » Cod sursa (job #3127378) | Cod sursa (job #1800455) | Cod sursa (job #3144453) | Cod sursa (job #1390910) | Cod sursa (job #41605)
Cod sursa(job #41605)
# include <stdio.h>
# include <string.h>
# define _fin "puteri.in"
# define _fout "puteri.out"
# define maxn 100002
# define maxp 130
# define maxr 65
int p[maxn][3], nr[maxr][maxr][maxr], ad[maxr][maxr][maxr], n;
int a[maxp], i, j, sol, to;
int A, B, C, mA, mB, mC;
int mod[128][128];
void readf()
{
freopen(_fin, "r", stdin);
for (scanf("%d", &n), i=1; i<=n; i++) scanf("%d%d%d", &p[i][0], &p[i][1], &p[i][2]);
}
int ndiv(int x)
{
int d, cnt, ret=0;
for (d=2; x!=1; d++) {
for (cnt=0; !(x%d); ++cnt, x/=d);
ret += (cnt==1);
}
return ret;
}
void solve()
{
for (i=2; i<=128; i++)
for (j=0; j<128; j++) mod[j][i] = j%i;
for (i=2; i<=128; i++) {
memset(nr, 0, sizeof(nr));
memset(ad, 0, sizeof(ad));
to = i>maxr?maxr:i;
for (j=1; j<=n; j++) ++nr[ mod[p[j][0]][i] ][ mod[p[j][1]][i] ][ mod[p[j][2]][i] ];
for (A=mA=0; A<to; A++, mA=mod[i-A][i] )
for (B=mB=0; B<to; B++, mB=mod[i-B][i] )
for (C=mC=0; C<to; C++, mC=mod[i-C][i] )
if ( mA<maxr&&mB<maxr&&mC<maxr )
if ( !ad[A][B][C] ) {
if ( A==mA && B==mB && C==mC )
a[i] += ((nr[A][B][C]*(nr[A][B][C]-1))>>1), ad[A][B][C]=1;
else
a[i] += nr[A][B][C]*nr[mA][mB][mC], ad[A][B][C]=ad[mA][mB][mC]=1;
}
if ( ndiv(i)&1 ) sol+=a[i];
else sol -= a[i];
}
}
int main()
{
readf();
solve();
fprintf(fopen(_fout,"w"), "%d\n", sol);
return 0;
}