Pagini recente » Cod sursa (job #2410410) | Cod sursa (job #1758458) | Cod sursa (job #2438190) | Cod sursa (job #2602661) | Cod sursa (job #2383420)
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("puteri.in");
ofstream out("puteri.out");
const int N_MAX = 100001;
int N;
int a[N_MAX], b[N_MAX], c[N_MAX];
int nr[65][65][65];
int bit[129], rest[129];
bool isprime[129];
long long sol;
long long compute(int mod) {
long long sol = 0;
memset(nr, 0, sizeof(nr));
for(int i = 0; i <= 128; ++i)
rest[i] = i % mod;
for(int i = 1; i <= N; ++i) {
int ra = rest[mod - rest[a[i]]];
int rb = rest[mod - rest[b[i]]];
int rc = rest[mod - rest[c[i]]];
if(ra <= 64 && rb <= 64 && rc <= 64)
sol += nr[ra][rb][rc];
++nr[rest[a[i]]][rest[b[i]]][rest[c[i]]];
}
return sol;
}
int main() {
in >> N;
for(int i = 1; i <= N; ++i)
in >> a[i] >> b[i] >> c[i];
for(int i = 2; i <= 128; ++i)
isprime[i] = true, bit[i] = -1;
for(int p = 2; p <= 128; ++p) {
if(isprime[p]) {
for(int i = p; i <= 128; i += p)
isprime[i] = false, bit[i] *= -1; //ciur + numarare (paritate) nr factori din descompunere
for(int i = p * p; i <= 128; i += p * p)
bit[i] = 0; //nu luam la pinex numerele care au exponent >= 2 in descompunere
}
if(bit[p] != 0)
sol += bit[p] * compute(p);
}
out << sol;
return 0;
}