Pagini recente » Istoria paginii utilizator/cosmina_yup | Cod sursa (job #1402783) | Cod sursa (job #1402389) | Cod sursa (job #2796987) | Cod sursa (job #1466087)
# include <bits/stdc++.h>
# define ll long long
using namespace std;
class Reader {
public:
Reader(const string& filename):
m_stream(filename),
m_pos(kBufferSize - 1),
m_buffer(new char[kBufferSize]) {
next();
}
Reader& operator>>(int& value) {
value = 0;
while (current() < '0' || current() > '9')
next();
while (current() >= '0' && current() <= '9') {
value = value * 10 + current() - '0';
next();
}
return *this;
}
private:
const int kBufferSize = 32768;
char current() {
return m_buffer[m_pos];
}
void next() {
if (!(++m_pos != kBufferSize)) {
m_stream.read(m_buffer.get(), kBufferSize);
m_pos = 0;
}
}
ifstream m_stream;
int m_pos;
unique_ptr<char[]> m_buffer;
};
Reader fi("puteri.in");
ofstream fo("puteri.out");
const int pw[] = {-1,1};
const int nmax = 1 << 7;
int ok(int p)
{
bool k = 0;
for (int i = 2;i*i <= p;++i)
if (!(p%i))
{
p /= i;
if (!(p%i)) return 0;
k = 1 - k;
}
if (p > 1) k = 1 - k;
return pw[k];
}
int main(void)
{
int n;
fi>>n;
int * a;
int * b;
int * c;
int ***s;
a = new int [n+1];
b = new int [n+1];
c = new int [n+1];
ll * ans;
ans = new ll [nmax+5];
s = new int** [nmax];
for (int i = 0;i < nmax;++i) s[i] = new int*[nmax];
for (int i = 0;i < nmax;++i)
for (int j = 0;j < nmax;++j) s[i][j] = new int[nmax];
for (int i = 0;i < nmax;++i)
for (int j = 0;j < nmax;++j)
memset(s[i][j],0,sizeof(s[i][j]));
for (int i = 1;i <= n;++i) fi>>a[i]>>b[i]>>c[i];
for (int mod = 2;mod <= nmax;++mod)
if (ok(mod))
{
for (int i = 1;i <= n;++i)
s[a[i]%mod][b[i]%mod][c[i]%mod]++;
for (int i = 1;i <= n;++i)
{
int x = mod - (a[i]%mod);
int y = mod - (b[i]%mod);
int z = mod - (c[i]%mod);
if (x == mod) x = 0;
if (y == mod) y = 0;
if (z == mod) z = 0;
int ix = mod - x;
int iy = mod - y;
int iz = mod - z;
if (ix == mod) ix = 0;
if (iy == mod) iy = 0;
if (iz == mod) iz = 0;
if (x == ix && iy == y && z == iz)
ans[mod] += 1ll * (s[x][y][z] - 1) * s[x][y][z] / 2;
else
ans[mod] += 1ll * s[x][y][z] * s[ix][iy][iz];
s[x][y][z] = s[ix][iy][iz] = 0;
}
}
ll rs = 0;
for (int i = 2;i <= nmax;++i) rs += ok(i) * ans[i];
return fo << rs << '\n',0;
}