Pagini recente » Cod sursa (job #945755) | Cod sursa (job #792839) | Cod sursa (job #2233862) | Cod sursa (job #1047670) | Cod sursa (job #2947513)
#include<bits/stdc++.h>
using namespace std;
const int NMAX=1e6+5,buffsize=1<<13;
long long MOD=666013;
typedef long long ll;
ofstream fout("pairs.out");
FILE* fin;
char buff[buffsize];
int buffpos=buffsize;
int read(){
if(buffpos==buffsize) fread(buff,1,buffsize,fin),buffpos=0;
int n=0;
while(buff[buffpos]<'0' || buff[buffpos]>'9'){
++buffpos;
if(buffpos==buffsize) fread(buff,1,buffsize,fin),buffpos=0;
}
while(buff[buffpos]>='0' && buff[buffpos]<='9'){
n=(n<<1)+(n<<3)+(buff[buffpos]^48);
++buffpos;
if(buffpos==buffsize) fread(buff,1,buffsize,fin),buffpos=0;
}
return n;
}
int mobius[NMAX],fr[NMAX],gpf[NMAX],cntp;
bool ciur[NMAX];
void precompute(){
ciur[0]=ciur[1]=gpf[1]=mobius[1]=1;
for(ll i=2;i<NMAX;i++) if(!ciur[i]){
for(ll j=i;j<NMAX;j+=i){
ciur[j]=1;
gpf[j]=i;
}
}
for(ll i=2;i<NMAX;i++){
ll x=i;
if(gpf[x/gpf[x]]==gpf[x])
mobius[i]=0;
else
mobius[x]=-mobius[x/gpf[x]];
}
}
int main(){
precompute();
fin=fopen("pairs.in","r");
ll n=read(),ans=0;
for(ll i=0;i<n;i++) ++fr[read()];
for(ll i=1;i<NMAX;i++){
ll cnt=0;
for(ll m=i;m<NMAX;m+=i) cnt+=fr[m];
ans+=mobius[i]*cnt*(cnt-1)/2;
}
fout<<ans;
return 0;
}