Pagini recente » Cod sursa (job #2327729) | Cod sursa (job #2229375) | Cod sursa (job #1917455) | Cod sursa (job #1553512) | Cod sursa (job #213791)
Cod sursa(job #213791)
using namespace std;
#include<fstream>
#include<vector>
const int M=1000005;
int N,x[M],nrd[M];
vector<bool> v(M,false);
void div()
{
int i,k,j;
for(i=2;i<M;++i)
{
if(nrd[i]==-1)
continue;
if(nrd[i]==0)//i este prim;
{
for(j=i;j<M;j+=i)
if(nrd[j]!=-1)
++nrd[j];
if(i>1000)
continue;
k=i*i;
for(j=k;j<M;j+=k)
nrd[j]=-1;
}
for(j=i;j<M;j+=i)
if(v[j])
++x[i];
}
}
inline long long comb(int n)
{
long long nn=(long long)n;
return nn*(nn-1)/2;
}
long long calcul()
{
int i;
long long s=comb(N);
for(i=1;i<M;++i)
if(nrd[i]!=-1)
if(nrd[i]%2)
s-=comb(x[i]);
else
s+=comb(x[i]);
return s;
}
int main()
{
int i,a;
ifstream in("pairs.in");
ofstream out("pairs.out");
in>>N;
for(i=1;i<=N;i++)
{
in>>a;v[a]=true;
}
div();
out<<calcul();
in.close(); out.close();
return 0;
}