Pagini recente » Cod sursa (job #378304) | Cod sursa (job #2157634) | Cod sursa (job #536355) | Cod sursa (job #387696) | Cod sursa (job #2607034)
#include <bits/stdc++.h>
using namespace std;
class InParser
{
#pragma warning(disable:4996)
private:
FILE* fin;
char* buff;
int sp;
char read()
{
++sp;
if (sp == 4096)
{
sp = 0;
fread(buff, 1, 4096, fin);
}
return buff[sp];
}
public:
InParser(const char* nume)
{
sp = 4095;
buff = new char[4096];
fin = fopen(nume, "r");
}
InParser& operator >> (int& n)
{
char c;
while (!isdigit(c = read()));
n = c - '0';
while (isdigit(c = read()))
n = n * 10 + c - '0';
return *this;
}
};
int n,a[100005],b[100005],c[100005];
int dp[66][66][66],semn[132];
bool ciur[132];
long long rasp=0;
long long int dinamica(int k)
{
long long sol=0,unic=0;
int x,y,h;
for(int i=1;i<=n;i++)
{
x=a[i]%k,y=b[i]%k,h=c[i]%k;
dp[x][y][h]++;
}
int maxim=min(64,k);
for(int i=0;i<=maxim;i++)
for(int j=0;j<=maxim;j++)
for(int z=0;z<=maxim;z++)
{
if(i==0) x=0;
else x=k-i;
if(j==0) y=0;
else y=k-j;
if(z==0) h=0;
else h=k-z;
if(i==x&&j==y&&z==h) {
if(dp[i][j][z]>1) unic+=1LL*dp[i][j][z]*(dp[i][j][z]-1)/2;
}
else if(x<=64&&y<=64&&h<=64) sol+=1LL*dp[i][j][z]*dp[x][y][h];
}
sol/=2;
memset(dp,0,sizeof dp);
return sol+unic;
}
int main()
{
InParser f("puteri.in");
ofstream g("puteri.out");
f>>n;
for(int i=1;i<=n;i++)
f>>a[i]>>b[i]>>c[i];
for(int i=1;i<=128;i++)
semn[i]=1;
for(int i=2;i<=128;i++)
{
if(ciur[i]==0)
{
for(int j=i;j<=128;j+=i)
{
semn[j]*=-1;
ciur[j]=1;
}
for(int j=i*i;j<=128;j+=i*i)
semn[j]=0;
}
if(semn[i]!=0)
rasp-=1LL*semn[i]*dinamica(i);
}
g<<rasp;
}