Pagini recente » Cod sursa (job #2536405) | Cod sursa (job #1552716) | Cod sursa (job #1507065) | Cod sursa (job #1447924) | Cod sursa (job #1727265)
#include <cstdio>
#include <cstring>
#define MAXE 64
#define MAXC 128
#define MAXN 100000
bool prim[MAXC+1];
int s[MAXE+1][MAXE+1][MAXE+1];
int mobius[MAXC+1], g[MAXC+1];
int n, a[MAXN], b[MAXN], c[MAXN];
inline long long solve(int mod){
int i, a1, b1, c1;
long long ans=0;
memset(s, 0, sizeof s);
for(i=0; i<=MAXC; i++) g[i]=i%mod;
for(i=0; i<n; i++){
a1=g[mod-g[a[i]]], b1=g[mod-g[b[i]]], c1=g[mod-g[c[i]]];
if((a1<=MAXE)&&(b1<=MAXE)&&(c1<=MAXE)) ans+=s[a1][b1][c1];
s[g[a[i]]][g[b[i]]][g[c[i]]]++;
}
return ans;
}
int main(){
int i, j;
long long ans=0;
FILE *fin, *fout;
fin=fopen("puteri.in", "r");
fout=fopen("puteri.out", "w");
fscanf(fin, "%d", &n);
for(i=0; i<n; i++) fscanf(fin, "%d%d%d", &a[i], &b[i], &c[i]);
for(i=2; i<=MAXC; i++) mobius[i]=1;
for(i=2; i<=MAXC; i++){
if(prim[i]==0){
for(j=i; j<=MAXC; j+=i) mobius[j]*=-1, prim[j]=1;
for(j=i*i; j<=MAXC; j+=i*i) mobius[j]=0;
}
if(mobius[i]!=0) ans-=mobius[i]*solve(i);
}
fprintf(fout, "%lld\n", ans);
fclose(fin);
fclose(fout);
return 0;
}