Pagini recente » Cod sursa (job #2844755) | Cod sursa (job #397894) | Cod sursa (job #1809208) | Cod sursa (job #969123) | Cod sursa (job #214834)
Cod sursa(job #214834)
#include <stdio.h>
#include <vector>
using namespace std;
const int n_max = 2000020;
vector <bool> m(n_max,false);
char nr[n_max];
int b[100001][3];
long long sol, n, maxim = 128;
void read()
{
freopen("puteri.in","r",stdin);
freopen("puteri.out","w",stdout);
scanf(" %lld", &n);
0
long long t;
for (int i = 1; i <= n; ++ i)
{
scanf("%d %d %d", &b[i][0], &b[i][1], &b[i][2]);
}
}
inline long long combinari(long long x)
{
return (long long)x*(x-1)/2;
}
long long kfc (int x) //A long time ago in a far away galaxy
{ //There was a chicken ...
int a[128][128][128];
long long sol = 0;
for (int i = 1; i <= n; ++ i)
++a[b[i][0]%x][b[i][1]%x][b[i][2]%x]; // Here we fill the matrix with eggs from our chicken
for (int i = 1; i <= x; ++ i)
for (int j =1; j<= x; ++ j)
for (int k = 1; k <= x; ++ k)
sol+=a[i][j][k]*a[x-i][x-j][x-k];
sol/=2; // And here the big guy smashes the idiot chicken!!!
return sol;
}
void solve()
{
long long i, j;
for (i = 2; i<= maxim; ++i)
{
int v = 0;
if (nr[i] == -1)
continue;
if (nr[i] == 0)
for (j = i; j <= maxim; j+=i)
{
if (nr[j] != -1)
++nr[j];
}
long long k = i*i;
if (2*k <= 128)
for (j = k; j <= maxim; j+=k)
nr[j] = -1;
else
if(k<=128)
nr[k] = -1;
if (nr[i]%2 == 0)
sol+=kfc(i);
else
sol-=kfc(i);
/*fprintf(stderr,"DEBUG: PT I=%lld MERGE!!J =%lld\n", i, j);
fflush(stdout);*/
}
}
void print()
{
printf("%lld\n", sol);
}
void test() // THe sound barrier breaking function
{
while (1)
;
}
int main()
{
// read();
sol = combinari(n);
solve();
print();
return 0;
}