Pagini recente » Cod sursa (job #3322892) | Borderou de evaluare (job #1569590) | Cod sursa (job #3333975) | Diferente pentru problema/cbinteractiv intre reviziile 9 si 8 | Cod sursa (job #3327751)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("puteri.in");
ofstream fout("puteri.out");
typedef long long ll;
const ll MAX = 64;
struct NrMultime {
int x, y, z;
};
int fr[2 * MAX + 2][2 * MAX + 2][2 * MAX + 2];
ll n, i, j, k, rasp;
NrMultime v[100002];
static inline ll Posib(int i) {
ll nm = 0;
memset(fr, 0, sizeof(fr));
for(j = 1; j <= n; j++) {
int ix = (i - v[j].x % i) % i;
int iy = (i - v[j].y % i) % i;
int iz = (i - v[j].z % i) % i;
if(ix <= MAX && iy <= MAX && iz <= MAX) {
nm += fr[ix][iy][iz];
}
fr[v[j].x % i][v[j].y % i][v[j].z % i]++;
}
return nm;
}
int main() {
ios_base::sync_with_stdio(false);
fin.tie(nullptr);
fout.tie(nullptr);
fin >> n;
for(i = 1; i <= n; i++) {
fin >> v[i].x >> v[i].y >> v[i].z;
}
for(i = 2; i <= 2 * MAX; i++) {
int semn = -1;
int d = 2;
int ii = i;
while(d * d <= ii) {
if(ii % d == 0) {
int e = 0;
while(ii % d == 0) {
ii /= d;
e++;
}
if(e > 1) {
semn = 0;
break;
}
else if(e > 0) semn = -semn;
}
d++;
}
if(ii > 1) semn = -semn;
if(semn != 0) {
rasp += semn * Posib(i);
}
}
fout << rasp;
return 0;
}