Pagini recente » Cod sursa (job #2040145) | Cod sursa (job #2107729) | Cod sursa (job #2431317) | Istoria paginii runda/campion | Cod sursa (job #218175)
Cod sursa(job #218175)
using namespace std;
#include<fstream>
int N,nr[129][129][129],v[100005][3],ciur[129];
long long final;
void ciuruire()// va arata ce numere sunt prime sau produse de factori primi;
{
int i,j,k;
for(i=1;i<=128;++i)
ciur[i]=0;
for(i=2;i<=128;++i)
if(ciur[i]==0) //numarul este prim;
{
for(j=i;j<=128;j+=i)
if(ciur[j]!=-1)
ciur[j]++;
k=i*i;
for(j=k;j<=128;j+=k)
ciur[j]=-1;//are divizor patratul unui numar prim;
}
}
void citire()
{
int i,j;
ifstream in("puteri.in");
in>>N;
ciuruire();
for(i=1;i<=N;++i)
{
in>>v[i][0]>>v[i][1]>>v[i][2];
for(j=2;j<=v[i][0]+1 || j<=v[i][1]+1 || j<=v[i][2]+1;j++)
if (ciur[j]>0)
nr[v[i][0]%j][v[i][1]%j][v[i][2]%j]++;
}
in.close();
}
long long suma( long long i)
{
long long j1,s=0,j2,j3;
for(j1=0;j1<=i/2;++j1)
for(j2=0;j2<=i/2;++j2)
for(j3=0;j3<=i/2;++j3)
if(!((2*j1)||(2*j2)||(2*j3)))
s+=(long long)nr[j1][j2][j3]*(long long)(nr[j1][j2][j3]-1)/2;
else
s+=(long long)nr[j1][j2][j3]*(long long)nr[i-j1][i-j2][i-j3];
return s;
}
void calcul()
{
int i;
final=0;
for(i=2;i<=128;++i)
{
if(ciur[i]>0)
if(ciur[i]&1)
final+=suma((long long)i);
else
final-=suma((long long)i);
}
}
int main()
{
ofstream out("puteri.out");
citire();
calcul();
out<<final<<'\n';
out.close();
return 0;
}