Pagini recente » Cod sursa (job #261535) | Cod sursa (job #431831) | Cod sursa (job #2189447) | Cod sursa (job #2184310) | Cod sursa (job #1120272)
#include<stdio.h>
#include<algorithm>
#define maxn 100005
#define maxval 1000005
#define inf 0x3f3f3f3f
using namespace std;
int n,m;
int used[maxval],nr[maxval],sieve[maxval];
long long sol;
void read()
{
int x;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&x),m=max(m,x),used[x]=1;
}
void solve()
{
sol=1LL*n*(n-1)/2;
for(int i=2;i<=m;i++)
if(!sieve[i])
{
for(long long j=i;j<=m;j+=i)
{
sieve[j]++;
if(used[j]) nr[i]++;
}
for(long long j=1LL*i*i;j<=m;j+=1LL*i*i) sieve[j]=-inf;
sol-=1LL*nr[i]*(nr[i]-1)/2;
}
else
if(sieve[i]>1)
{
for(long long j=i;j<=m;j+=i) if(used[j]) nr[i]++;
if(sieve[i]%2==0) sol+=1LL*nr[i]*(nr[i]-1)/2;
else sol-=1LL*nr[i]*(nr[i]-1)/2;
}
}
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
read();
solve();
printf("%lld",sol);
fclose(stdin);
fclose(stdout);
return 0;
}