Pagini recente » Cod sursa (job #2251972) | Cod sursa (job #305113) | Cod sursa (job #2374836) | Cod sursa (job #2698380) | Cod sursa (job #1827510)
#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,x0,y0,z0,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 <= FMax; ++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(x = 0; x < i; ++x)
for(y = 0; y < i; ++y)
for(z = 0; z < i; ++z)
{
x0 = rest[ 32*i-x ][i];
y0 = rest[ 32*i-y ][i];
z0 = rest[ 32*i-z ][i];
v[i] = v[i] + 1LL * ap[x][y][z] * ap[x0][y0][z0];
if( x==x0 && y==y0 && z==z0 ) v[i] = v[i] - ap[x][y][z];
}
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];
if(x==i) x = 0;
if(y==i) y = 0;
if(z==i) z = 0;
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;
}