Pagini recente » Cod sursa (job #2688741) | Cod sursa (job #2490997) | Cod sursa (job #2343408) | Cod sursa (job #2295393)
# include <fstream>
# include <bitset>
# define DIM 1000010
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
bitset<DIM> b;
int d[DIM],f[DIM],nr[DIM],p[DIM],v[DIM/10],e[DIM/10],n,k,x,i,j,val,maxim;
long long sol;
int main () {
fin>>n;
for(i=1;i<=n;i++){
fin>>x;
f[x]=1;
v[i]=x;
maxim=max(maxim,x);
}
for(i=2;i*i<=maxim;i++)
if(p[i]==0)
for(j=2*i;j<=maxim;j+=i)
p[j]=1;
for(i=2;i<=maxim;i++)
if(p[i]==0)
e[++k]=i;
for(i=1;i<=n;i++){
x=v[i];
for(j=1;j<=k&&e[j]*e[j]<=v[i]&&x!=1;j++)
if(x%e[j]==0){
b[e[j]]=1;
while(x%e[j]==0)
x/=e[j];
}
if(x!=1)
b[x]=1;
}
for(i=1;i<=maxim;i++)
d[i]=1;
for(i=2;i<=maxim;i++)
if(d[i]==1&&b[i]==1)
for(j=i;j<=maxim;j+=i){
d[j]*=i*(1-p[i]);
nr[j]++;
}
for(i=1;i<=maxim;i++){
if(d[i]==i){
val=0;
for(j=i;j<=maxim;j+=i)
if(f[j])
val++;
if(nr[i]%2==0)
sol+=(1LL*val*(val-1))/2;
else
sol-=(1LL*val*(val-1))/2;
}
}
fout<<sol<<"\n";
return 0;
}