Pagini recente » Cod sursa (job #1867991) | Cod sursa (job #3314399) | Cod sursa (job #3314376) | Cod sursa (job #3314398) | Cod sursa (job #3315306)
#include <iostream>
#include <fstream>
#define ll long long
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
const int VALMAX=1e6;
int n,i,f[VALMAX+5],x,g[VALMAX+5],nr_primediv[VALMAX+5],j;
bool ciur[VALMAX+5];
ll sol;
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(0); fout.tie(0);
fin>>n;
sol=(ll)n*((ll)n-1)/2;
while (n--)
{
fin>>x;
f[x]++;
}
sol-=(ll)f[1]*((ll)f[1]-1)/2;
for (i=1; i<=VALMAX; i++)
for (j=i; j<=VALMAX; j+=i)
g[i]+=f[j];
for (i=1; i<=VALMAX; i++)
{
f[i]=g[i];
g[i]=1;
}
ciur[0]=ciur[1]=1;
for (i=2; i*i<=VALMAX; i++)
if (!ciur[i])
for (j=i*i; j<=VALMAX; j+=i)
ciur[j]=1;
for (i=2; i<=VALMAX; i++)
if (!ciur[i])
{
for (j=i; j<=VALMAX; j+=i)
{
nr_primediv[j]++;
g[j]*=i;
}
}
for (i=2; i<=VALMAX; i++)
{
if (g[i]==i)
{
if (nr_primediv[i]%2==1)
sol-=(ll)f[i]*((ll)f[i]-1)/2;
else
sol+=(ll)f[i]*((ll)f[i]-1)/2;
}
}
fout<<sol;
return 0;
}