Pagini recente » Borderou de evaluare (job #1290139) | Cod sursa (job #2594215) | Borderou de evaluare (job #1515097) | Cod sursa (job #2864309) | Cod sursa (job #2505423)
#include <bits/stdc++.h>
using namespace std;
const int nmax=1e6+5;
long long semn[2]= {-1,1};
bool ciur[nmax];
int nrd[nmax],f[nmax];
long long solve(long long n,long long mx)
{
long long ans=0,cnt=0;
for(int i=2;i<=mx;i++)
if(ciur[i]==false)
{
cnt=0;
for(int j=1; i*j<=mx; j++)
cnt+=min(f[i*j],1);
ans+=semn[nrd[i]%2]*cnt*(cnt-1)/(1LL*2);
}
return n*(n-1)/(1LL*2)-ans;
}
int main()
{
ifstream cin("pairs.in");
ofstream cout("pairs.out");
long long n,mx=0,x;
cin>>n;
///Ciur
for(int i=2; i<=nmax; i++)
if(nrd[i]==0)
for(int j=1; j*i<=nmax; j++)
{
if(j%i==0)
ciur[j*i]=1;
nrd[j*i]++;
}
///Citire
for(int i=1; i<=n; i++)
{
cin>>x;
f[x]++;
mx=max(mx,x);
}
cout<<solve(n,mx);
return 0;
}