Pagini recente » Cod sursa (job #761983) | Cod sursa (job #1687904) | Cod sursa (job #2931915) | Cod sursa (job #97663) | Cod sursa (job #2413486)
#include <bits/stdc++.h>
#define VARENA 0
#define INFOARENA 1
/*----------OPEN_FILES---------------*/
const char *FILEIN = "puteri.in" ;
const char *FILEOUT = "puteri.out" ;
#define FILES INFOARENA
#if FILES == 0
FILE *in = fopen(FILEIN, "r"), *out = fopen(FILEOUT, "w") ;
#else
std::ifstream in (FILEIN) ;
std::ofstream out (FILEOUT) ;
#endif // FILE
/*--------------MAXS--------------*/
const int MV = 100000 ;
const int MC = 128 ;
/*-----------STARTER_PACK-------------*/
int ciur[MC + 30] ;
int fr[MC / 2 + 20][MC / 2 + 20][MC / 2 + 20] ;
int rest[MC + 30] ;
struct triplet {
int a, b, c ;
};
triplet putere[MV + 30] ;
/*----------CIUR-----------*/
void sieve() {
int i, j ;
for (i = 2 ; i <= MC ; ++ i) {
if (!ciur[i]) {
for (j = i ; j <= MC ; j += i) {
ciur[j] ++ ;
}
}
}
}
/*--------PROGRAM----------*/
int main() {
int n, i, ra, rb, rc ;
in >> n ;
for (i = 1 ; i <= n ; ++ i) {
in >> putere[i].a >> putere[i].b >> putere[i].c ;
}
sieve() ;
int gcd, sol(0) ;
for (gcd = 2 ; gcd <= 128 ; ++ gcd) {
memset(fr, 0, sizeof fr) ;
for (i = 1 ; i <= 128 ; ++ i) {
rest[i] = i % gcd ;
}
for (i = 1 ; i <= n ; ++ i) {
ra = rest[gcd - rest[putere[i].a]] ;
rb = rest[gcd - rest[putere[i].b]] ;
rc = rest[gcd - rest[putere[i].c]] ;
if (ra <= 64 && rb <= 64 && rc <= 64) {
sol += fr[ra][rb][rc] * (ciur[gcd] == 1 ? ciur[gcd] : -1 * (ciur[gcd] - 1)) ;
}
fr[rest[putere[i].a]][rest[putere[i].b]][rest[putere[i].c]] ++ ;
}
}
out << sol ;
}