Pagini recente » Cod sursa (job #475404) | Cod sursa (job #2346652) | Cod sursa (job #2892311) | Cod sursa (job #2723796) | Cod sursa (job #2347109)
#include <fstream>
#include <vector>
#include <algorithm>
#include <bitset>
using namespace std;
ifstream fi("pairs.in");
ofstream fo("pairs.out");
const int NMAX=1e6+5;
int n,x[NMAX],mx,m,fct[NMAX],rez;
vector <int> v;
bitset <NMAX> in,S,F;
int par(int x)
{
if(x%2) return 1;
return -1;
}
int main()
{
fi>>n;
for(int i=1;i<=n;i++)
{
fi>>x[i];
S[x[i]]=1;
mx=max(x[i],mx);
}
for(int i=2;i<=mx;i++)
if(!F[i])
for(int j=i;j<=mx;j+=i)
{
if(S[j] && !in[i])
{
in[i]=1;
fct[i]=1;
v.push_back(i);
}
F[j]=1;
}
m=v.size();
for(int i=0;i<m;i++)
{
int sz=v.size();
for(int j=i+1;j<sz;j++)
if(v[i]*v[j]<=mx && v[j]%v[i] && !fct[v[i]*v[j]])
{
fct[v[i]*v[j]]=fct[v[i]]+fct[v[j]];
v.push_back(v[i]*v[j]);
}
}
sort(v.begin(),v.end());
for(int i=0;i<v.size();i++)
for(int j=v[i];j<=mx;j+=v[i])
if(S[j])
rez+=par(fct[v[i]]);
fo<<n*(n-1)/2-rez<<"\n";
fi.close();
fo.close();
return 0;
}