Cod sursa(job #3327751)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 5 decembrie 2025 00:02:41
Problema Puteri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.52 kb
#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;
}