Pagini recente » Cod sursa (job #20683) | Cod sursa (job #420013) | Cod sursa (job #188451) | Cod sursa (job #261538) | Cod sursa (job #677803)
Cod sursa(job #677803)
#include <fstream>
#include <cstring>
#define maxM 1000001
using namespace std;
bool v[maxM];
long long x[maxM];
int d[maxM];
ifstream in;
ofstream out;
int main()
{
int N,w,max=0;
in.open("pairs.in");
in>>N;
memset(v,false,sizeof(v));
for(int i=1;i<=N;++i)
{
in>>w;
if(w>max) max=w;
v[w]=true;
}
in.close();
memset(x,0,sizeof(x));
memset(d,0,sizeof(d));
for(int i=2;i<=max;++i)
for(int j=i;j<=max;j+=i)
if(v[j]) ++x[i];
for(int i=2;i<=max;++i)
if(d[i]==0)
{
d[i]=1;
for(int j=i+i;j<=max;j+=i)
++d[j];
}
long long sol=N*(N-1)/2;
for(int i=2;i<=max;++i)
if(x[i]>1)
{
if(d[i]%2==1) sol-=x[i]*(x[i]-1)/2;
else sol+=x[i]*(x[i]-1)/2;
}
out.open("pairs.out");
out<<sol<<'\n';
out.close();
return 0;
}