Pagini recente » Istoria paginii runda/teo.contest/clasament | Cod sursa (job #1835335) | Cod sursa (job #363220) | Cod sursa (job #2803088) | Cod sursa (job #2260756)
#include <cstdio>
#define VALMAX 1000005
using namespace std;
int f[VALMAX],v[VALMAX];
int main()
{
FILE *fin=fopen ("pairs.in","r");
FILE *fout=fopen ("pairs.out","w");
int n,i,j,x,s;
long long sol;
fscanf (fin,"%d",&n);
for (i=1;i<=n;i++){
fscanf (fin,"%d",&x);
f[x]=1;
}
for (i=2;i<=VALMAX;i++){
if (!v[i]){
v[i]=1;
for (j=i+i;j<=VALMAX;j+=i)
v[j]++;
}
}
for (i=2;i*i<=VALMAX;i++){
for (j=i*i;j<=VALMAX;j+=i*i)
v[j]=0; // v[i]=1 doar daca i are doar fact prm distincti
}
sol=(long long)n*(n-1)/2;
for (i=2;i<=VALMAX;i++){
if (!v[i])
continue;
s=0;
for (j=i;j<=VALMAX;j+=i)
s+=f[j];
if (v[i]%2==1)
sol-=((long long)s*(s-1)/2);
else sol+=((long long)s*(s-1)/2);
}
fprintf (fout,"%lld",sol);
return 0;
}