Pagini recente » Cod sursa (job #2042482) | Cod sursa (job #1119811) | Cod sursa (job #909661) | Cod sursa (job #530956) | Cod sursa (job #651116)
Cod sursa(job #651116)
#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 M,x,V[MaxM],P[MaxM],D[MaxM];
long long N,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;
}
}
}
/*
{
for(i=1;i<=N;++i)
{
if(M<x)
{
M=x;
}
V[x]=1;
}
fin.close();
for(i=2;i<=M;++i)
{
P[i]=1;
}
sol=((N*(N-1))>>1LL);
for(i=2;i<=M;++i)
{
else
{
sol+=val;
}
}
*/
fout<<sol;
fout.close();
return 0;
}