Pagini recente » Cod sursa (job #2320358) | Cod sursa (job #485356) | Cod sursa (job #2766462) | Cod sursa (job #2631593) | Cod sursa (job #881558)
Cod sursa(job #881558)
#include <iostream>
#include <fstream>
#define N 1000000
using namespace std;
bool ok[N+1],prim[N+1],v[N+1];
int nrdiv[N+1];
void ciur()
{
int i,j;
for(i=1;i<=N;++i)
ok[i]=prim[i]=true;
prim[1]=ok[1]=false;
for(i=1;i<=N;++i)
{
if(!prim[i])
continue;
nrdiv[i]=1;
for(j=2;i*j<=N;++j)
{
prim[i*j]=false;
nrdiv[i*j]++;
if(j%i==0)
{
ok[i*j]=false;
}
}
}
}
int main()
{
ifstream in("pairs.in");
ofstream out("pairs.out");
int n,p,i,j,k;
long long rez;
in>>n;
for(i=1;i<=n;++i)
{
in>>p;
v[p]=true;
}
ciur();
rez=(long long)n*(n-1)/2;
for(i=2;i<=N;++i)
{
if(!ok[i])
continue;
k=0;
for(j=1;j*i<=N;++j)
if(v[i*j]==true)
++k;
if(nrdiv[i]%2==0)
rez+=(long long)k*(k-1)/2;
else
rez-=(long long)k*(k-1)/2;
}
out<<rez<<"\n";
return 0;
}