Pagini recente » Cod sursa (job #328861) | Cod sursa (job #1985833) | Cod sursa (job #256829) | Cod sursa (job #257244) | Cod sursa (job #34181)
Cod sursa(job #34181)
#include <stdio.h>
#define MAX_P 65
#define MAX_N 100005
#define FIN "puteri.in"
#define FOUT "puteri.out"
#define ll long long
int N, cnt[MAX_P][MAX_P][MAX_P]; ll Res;
char A[MAX_N], B[MAX_N], C[MAX_N];
int main(void)
{
int i, j, k, p, t, sgn, a, b, c;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &N);
for (i = 0; i < N; i++)
scanf("%d %d %d", A+i, B+i, C+i);
for (p = 2; p <= 128; p++)
{
sgn = 0;
for (t = p, i = 2; i <= p; i++)
{
if (t%i) continue;
if (!((t/i)%i)) break;
t /= i; sgn ^= 1;
}
if (i <= p) continue;
for (i = 0; i < p && i <= 64; i++)
for (j = 0; j < p && j <= 64; j++)
for (k = 0; k < p && k <= 64; k++)
cnt[i][j][k] = 0;
for (i = 0; i < N; i++)
cnt[A[i]%p][B[i]%p][C[i]%p]++;
for (i = 0; i < p && i <= 64; i++)
for (a = i ? p-i : 0, j = 0; j < p && j <= 64; j++)
for (b = j ? p-j : 0, k = 0; k < p && k <= 64; k++)
{
c = k ? p-k : k;
if (a > 64 || b > 64 || c > 64) continue;
if (i == a && j == b && k == c)
Res += (sgn ? +1 : -1)*(ll)cnt[i][j][k]*(cnt[i][j][k]-1);
else
Res += (sgn ? +1 : -1)*(ll)cnt[i][j][k]*cnt[a][b][c];
}
}
printf("%lld\n", Res/2);
return 0;
}