Pagini recente » Cod sursa (job #119450) | Cod sursa (job #255101) | Cod sursa (job #913296) | Cod sursa (job #747534) | Cod sursa (job #881554)
Cod sursa(job #881554)
#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,rez,i,j,k;
in>>n;
for(i=1;i<=n;++i)
{
in>>p;
v[p]=true;
}
ciur();
rez=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+=k*(k-1)/2;
else
rez-=k*(k-1)/2;
}
out<<rez<<"\n";
return 0;
}