Pagini recente » Cod sursa (job #2295365) | Cod sursa (job #925709) | Cod sursa (job #879273) | Cod sursa (job #1860077) | Cod sursa (job #3266168)
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
int t, n, i, j, divi[1000005], maxim, x, fr[1000005], c[1000005];
long long ans;
int main()
{
fin>>n;
for(i=1; i<=n; i++)
{
fin>>x;
fr[x]++;
maxim=max(maxim, x);
int d=2;
vector <int> prim;
while(x>1)
{
if(x%d==0)
{
prim.push_back(d);
while(x%d==0)
x/=d;
}
d++;
if(d*d>x && x>1)
d=x;
}
int k=prim.size();
for(int mask=1; mask<(1<<k); mask++)
{
int pr=1, nr=0;
for(int j=0; j<k; j++)
if(mask&(1<<j))
{
nr++;
pr*=prim[j];
}
if(pr<=1e6)
{
if(nr%2)
c[pr]=1;
else
if(nr!=0)
c[pr]=2;
}
}
}
for(i=2; i<=maxim; i++)
{
x=i;
int p=1;
while(x*p<=1e6)
{
divi[x]+=fr[x*p];
p++;
}
}
for(i=2; i<=maxim; i++)
{
if(c[i]==1)
ans+=1ll*divi[i]*(divi[i]-1)/2;
else
if(c[i]==2)
ans-=1ll*divi[i]*(divi[i]-1)/2;
}
fout<<1ll*n*(n-1)/2-ans;
return 0;
}