Pagini recente » Cod sursa (job #487778) | Cod sursa (job #483017) | Monitorul de evaluare | Cod sursa (job #1131053) | Cod sursa (job #630480)
Cod sursa(job #630480)
#include <fstream>
using namespace std;
const char InFile[]="pairs.in";
const char OutFile[]="pairs.out";
const int MaxM=1000111;
const int MaxN=100111;
ifstream fin(InFile);
ofstream fout(OutFile);
int N,M,x,V[MaxM],P[MaxM],D[MaxM];
long long sol;
int main()
{
fin>>N;
for(register int i=1;i<=N;++i)
{
fin>>x;
if(M<x)
{
M=x;
}
V[x]=1;
}
fin.close();
for(register int i=2;i<=M;++i)
{
P[i]=1;
}
for(register int i=2;i<=M;++i)
{
if(P[i]==1)
{
for(register int j=i;j<=M;j+=i)
{
P[j]*=i;
++D[j];
}
}
}
sol=((N*(N-1))>>1LL);
for(register int i=2;i<=M;++i)
{
if(P[i]==i)
{
long long cnt=0;
for(register int j=i;j<=M;j+=i)
{
cnt+=V[j];
}
long long val=((cnt*(cnt-1))>>1LL);
if(D[i]&1)
{
sol-=val;
}
else
{
sol+=val;
}
}
}
fout<<sol;
fout.close();
return 0;
}