Pagini recente » Cod sursa (job #766984) | Cod sursa (job #1552760) | Cod sursa (job #821245) | Cod sursa (job #817331) | Cod sursa (job #1827329)
#include <cstdio>
#define NMax 100000
#define VMax 128
#define FMax 64
#define ll long long
int ap[VMax+1][VMax+1][VMax+1];
int rest[4097][65];
int a[NMax+1];
int b[NMax+1];
int c[NMax+1];
ll v[VMax+1];
void Set(int v)
{
int i,j,k;
for(i = 0; i <= v; ++i)
for(j = 0; j <= v; ++j)
for(k = 0; k <= v; ++k) ap[i][j][k] = 0;
}
void Precalc()
{
int i,j;
for(i = 0; i <= 4096; ++i)
for(j = 2; j <= 64; ++j)
rest[i][j] = i%j;
}
bool prim(int x)
{
for(int i = 2; i * i <= x; ++i)
if( x % i == 0 ) return 0;
return 1;
}
bool is_good(int x)
{
int i,t;
for(i = 2; i * i <= x; ++i)
if( x % i == 0 )
{
t = 0;
while( x%i == 0 ) ++t, x/=i;
if(t>1) return 0;
}
return 1;
}
int f(int x)
{
int i,nr=0;
for(i = 2; i <= x; ++i)
if( x % i == 0 && prim(i) ) ++nr;
if(nr%2) return 1;
return -1;
}
int main(){
freopen("puteri.in","r",stdin);
freopen("puteri.out","w",stdout);
int i,j,x,y,z,N;
ll res;
Precalc();
scanf("%d",&N);
for(i = 1; i <= N; ++i)
{
scanf("%d %d %d",&x,&y,&z);
a[i] = x;
b[i] = y;
c[i] = z;
}
for(i = 2; i <= 7; ++i)
if( is_good(i) )
{
for(j = 1; j <= N; ++j)
++ap[ rest[a[j]][i] ][ rest[b[j]][i] ][ rest[c[j]][i] ];
for(j = 1; j <= N; ++j)
{
x = rest[(32*i-a[j])][i];
y = rest[(32*i-b[j])][i];
z = rest[(32*i-c[j])][i];
v[i] = v[i] + ap[x][y][z];
if( x==rest[a[j]][i] && y==rest[b[j]][i] && z==rest[c[j]][i] ) --v[i];
}
v[i] /= 2;
Set(i-1);
}
Set(FMax);
for(i = 1; i <= N; ++i) ++ap[ a[i] ][ b[i] ][ c[i] ];
for(i = FMax+1; i <= VMax; ++i)
if( is_good(i) )
{
for(j = 1; j <= N; ++j)
{
x = i-a[j];
y = i-b[j];
z = i-c[j];
v[i] = v[i] + ap[x][y][z];
if( x==a[j] && y==b[j] && z==c[j] ) --v[i];
}
v[i] /= 2;
}
for(res = 0, i = 2; i <= VMax; ++i) res += f(i)*v[i];
printf("%lld\n",res);
return 0;
}