Pagini recente » Cod sursa (job #2346764) | Cod sursa (job #1889491) | Cod sursa (job #2347112) | Cod sursa (job #1315947) | Cod sursa (job #2346763)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fi("pairs.in");
ofstream fo("pairs.out");
const int NMAX=1e6+5;
int n,x[NMAX],F[NMAX],in[NMAX],S[NMAX],mx,m,fct[NMAX],rez;
vector <int> v;
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;
}
F[i]=1;
}
m=v.size();
for(int i=0;i<m;i++)
{
int sz=v.size();
for(int j=i+1;j<sz;j++)
if(!fct[v[i]*v[j]] && v[j]%v[i] && v[i]*v[j]<=mx)
{
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=2;i<=mx;i++)
if(fct[i])
for(int j=i;j<=mx;j+=i)
if(S[j])
rez+=par(fct[i]);
fo<<rez<<"\n";
fi.close();
fo.close();
return 0;
}