Pagini recente » Cod sursa (job #1342482) | Cod sursa (job #408586) | Cod sursa (job #430784) | Cod sursa (job #947113) | Cod sursa (job #2504386)
#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;
if(poz[2]>0)
v[poz[2]].push_back(2);
for(int i=4; i<=ma; i+=2)
{
if(poz[i]>0)
v[poz[i]].push_back(2);
viz[i]=1;
}
for(int i=3; i<=ma; i+=2)
{
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]+=aux;
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])
sol+=temp;
else
sol-=temp;
}
cout<<init-sol;
return 0;
}