Pagini recente » Cod sursa (job #420468) | Cod sursa (job #489870) | Cod sursa (job #1263364) | Cod sursa (job #2720528) | Cod sursa (job #3290985)
#include <fstream>
#include <vector>
#define int long long
#define nmax (int)(1e5+1)
#define dim (int)(1e6+1)
using namespace std;
ifstream cin("pairs.in");
ofstream cout("pairs.out");
int n,sol,x,maxi,nr[dim];
bool ciur[dim];
vector<int>p;
void bck(int last,int t,int val){
if(t!=0){
if(t%2!=0){
if(nr[val]>1)
sol+=nr[val]*(nr[val]-1)/2;
}else if(nr[val]>1)
sol-=nr[val]*(nr[val]-1)/2;
}
if(last==p.size())
return ;
for(int i=last;i<=p.size();i++)
bck(i+1,t+1,val*p[i]);
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
for(int d=1;d*d<=x;d++)
if(x%d==0){
nr[d]++;
if(x/d!=d)
nr[x/d]++;
}
maxi=max(maxi,x);
}
for(int i=2;i<=maxi;i++)
if(!ciur[i]){
p.push_back(i);
for(int j=i*2;j<=maxi;j+=i)
ciur[j]=1;
}
bck(0,0,1);
cout<<n*(n-1)/2-sol;
return 0;
}