Pagini recente » Cod sursa (job #2073955) | Cod sursa (job #1108898) | Cod sursa (job #1553808) | Cod sursa (job #1628634) | Cod sursa (job #2504578)
#include <fstream>
#include <vector>
using namespace std;
bool viz[1000005],cap_pajura[1000005];
int poz[1000005],nr[1000005];
vector <int>v[100005];
void ciur(int ma)
{
viz[1]=viz[0]=1;
for(int i=2; i<=ma; i++)
{
if(viz[i]==0)
{
for(int j=i; j<=ma; j+=i)
{
viz[j]=1;
if(poz[j]>0)
v[poz[j]].push_back(i);
}
}
}
}
int main()
{
ifstream cin("pairs.in");
ofstream cout("pairs.out");
int n,x,ma=-1;
cin>>n;
long long init=(long long)n*((long long)n-1)/2;
for(int i=1; i<=n; i++)
{
cin>>x;
poz[x]=i;
ma=max(ma,x);
}
ciur(ma);
for(int i=1; i<=n; i++)
{
int pas=v[i].size();
for(int j=1; j<(1<<v[i].size()); j++)
{
int cnt1=1,cnt2=0,aux=1;
for(int t=0; t<v[i].size(); t++)
{
if(j&(1<<t))
{
cnt1=cnt1*v[i][t];
cnt2++;
}
}
nr[cnt1]++;
cap_pajura[cnt1]=(bool)cnt2%2;
}
}
long long sol=0;
for(int i=2; i<=ma; i++)
{
long long temp=(long long)nr[i]*((long long)nr[i]-1)/2;
if(cap_pajura[i]==true)
sol+=temp;
else
sol-=temp;
}
cout<<init-sol;
return 0;
}