Pagini recente » Cod sursa (job #1050281) | Cod sursa (job #358405) | Cod sursa (job #1917055) | Cod sursa (job #1276556) | Cod sursa (job #524694)
Cod sursa(job #524694)
#include <algorithm>
using namespace std;
#define DIM 100005
#define sc second
#define fs first
#define LIM 130
#define MAX 70
pair <pair <int,int>,int> v[DIM];
int viz[LIM],nrd[LIM];
int f[MAX][MAX][MAX];
long long nrt;
int n;
void read ()
{
int i;
scanf ("%d",&n);
for (i=1; i<=n; ++i)
scanf ("%d%d%d",&v[i].fs.fs,&v[i].fs.sc,&v[i].sc);
}
void solve ()
{
pair <pair <int,int>,int> cur;
long long cnt;
int i,j;
for (i=2; i<LIM; ++i)
{
for (j=i*i; j<LIM; j+=i*i)
viz[j]=1;
if (!nrd[i])
for (j=i; j<LIM; j+=i)
++nrd[j];
}
for (i=2; i<LIM; ++i)
if (!viz[i])
{
cnt=0;
memset (f,0,sizeof (f));
for (j=1; j<=n; ++j)
{
cur.fs.fs=v[j].fs.fs%i;
if (!cur.fs.fs)
cur.fs.fs=i;
cur.fs.sc=v[j].fs.sc%i;
if (!cur.fs.sc)
cur.fs.sc=i;
cur.sc=v[j].sc%i;
if (!cur.sc)
cur.sc=i;
if (i-cur.fs.fs<65 && i-cur.fs.sc<65 && i-cur.sc<65)
cnt+=f[i-cur.fs.fs][i-cur.fs.sc][i-cur.sc];
if (cur.fs.fs==i)
cur.fs.fs=0;
cur.fs.sc=v[j].fs.sc%i;
if (cur.fs.sc==i)
cur.fs.sc=0;
cur.sc=v[j].sc%i;
if (cur.sc==i)
cur.sc=0;
++f[cur.fs.fs][cur.fs.sc][cur.sc];
}
if (nrd[i]&1)
nrt+=cnt;
else
nrt-=cnt;
}
printf ("%lld\n",nrt);
}
int main ()
{
freopen ("puteri.in","r",stdin);
freopen ("puteri.out","w",stdout);
read ();
solve ();
return 0;
}