Pagini recente » Cod sursa (job #1664751) | Borderou de evaluare (job #2309876) | Cod sursa (job #2310127)
#include<fstream>
using namespace std;
ifstream cin("pairs.in");
ofstream cout("pairs.out");
int n,x,Prez[1000005],Maxim;
long long Total,Rez;
int main(){
std::ios_base::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
Maxim=max(x,Maxim);
Prez[x]++;
}
int NrEl[Maxim+5]={0},PrDesc[Maxim+5]={0},PrUnic[Maxim+5]={0},NrP[Maxim+5]={0},k=0;
for(int i=2;i<=Maxim;i+=2){
PrDesc[i]++;
PrUnic[i]=i/2;
if(PrUnic[i]==1) NrP[++k]=i;
}
for(int i=3;i<=Maxim;i+=2)
PrUnic[i]=i;
for(int i=3;i<=Maxim;i+=2)
if(PrDesc[i]==0)
for(int j=i;j<=Maxim;j+=i){
PrDesc[j]++;
PrUnic[j]/=i;
if(PrUnic[j]==1) NrP[++k]=j;
}
for(int i=1;i<=k;i++)
for(int j=NrP[i];j<=Maxim;j+=NrP[i])
NrEl[NrP[i]]+=Prez[j];
Total=1LL*n*(n-1)/2;
for(int i=1;i<=k;i++)
if(PrDesc[NrP[i]]%2==0)
Rez-=1LL*NrEl[NrP[i]]*(NrEl[NrP[i]]-1)/2;
else
Rez+=1LL*NrEl[NrP[i]]*(NrEl[NrP[i]]-1)/2;
cout<<Total-Rez;
}