Pagini recente » Cod sursa (job #2355352) | Cod sursa (job #486119) | Cod sursa (job #1828958) | Cod sursa (job #2952784) | Cod sursa (job #1727259)
#include <cstdio>
#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];
int n, a[MAXN], b[MAXN], c[MAXN];
int a1[MAXN], b1[MAXN], c1[MAXN];
inline long long solve(int mod){
int i, a2, b2, c2;
long long ans=0;
for(i=0; i<n; i++){
a1[i]=a[i]%mod;
b1[i]=b[i]%mod;
c1[i]=c[i]%mod;
if(a1[i]==0) a2=0;
else a2=mod-a1[i];
if(b1[i]==0) b2=0;
else b2=mod-b1[i];
if(c1[i]==0) c2=0;
else c2=mod-c1[i];
if((a2<=MAXE)&&(b2<=MAXE)&&(c2<=MAXE)) ans+=s[a2][b2][c2];
s[a1[i]][b1[i]][c1[i]]++;
}
for(i=0; i<n; i++) s[a1[i]][b1[i]][c1[i]]=0;
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=2*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;
}