Pagini recente » Cod sursa (job #416185) | Istoria paginii utilizator/santejudeandaiana | Cod sursa (job #438455) | Cod sursa (job #476062) | Cod sursa (job #572615)
Cod sursa(job #572615)
#include <fstream>
#include <bitset>
#define DN 1000005
using namespace std;
bitset<DN> viz,nrf/*par/impar*/,prim,div;
int main()
{
ifstream f("pairs.in");
ofstream g("pairs.out");
int n,rez=0,cc,lim=0;
f>>n;
for(int i=1; i<=n; ++i) {
f>>cc;
viz[cc]=1;
lim=max(lim,cc);
}
for(int i=2; i<=lim; ++i) if(0==prim[i]) for(int j=1; j*i<=lim;++j) {
prim[j*i]=1;
if(0==j%i) div[j*i]=1;
nrf[j*i]=nrf[j*i]^1;
}
for(int i=2; i<=lim; ++i) if(0==div[i]) {
int cont=0;
for(int j=1; j*i<=lim; ++j) if(1==viz[i*j]) ++cont;
if(0==nrf[i]) rez-=(cont*(cont-1)>>1);
else rez+=(cont*(cont-1)>>1);
}
g<<rez;
return 0;
}