Pagini recente » Cod sursa (job #3181546) | Cod sursa (job #2977232) | Cod sursa (job #2879813) | Cod sursa (job #406621) | Cod sursa (job #3219558)
#include <fstream>
#include <bitset>
using namespace std;
ifstream fin ("pairs.in");
ofstream fout ("pairs.out");
char ciur[1000001];
int maxim,n,i,v[100001],j,ok,fr[1000001];
long long sol;
bitset <1000001> f;
int main ()
{
fin>>n;
for (i=1; i<=n; i++)
{
fin>>v[i];
maxim=max (maxim,v[i]);
fr[v[i]]=1;
}
for (i=2; i<=maxim; i++)
{
if (ciur[i]==0)
{
ciur[i]=1;
for (j=i+i; j<=maxim; j+=i)
ciur[j]++;
}
}
for (i=2; i<=maxim; i++)
{
if (f[i]==0)
{
for (j=i+i; j<=maxim; j+=i)
fr[i]+=fr[j];
}
if (i<=1000&&ciur[i]==1&&f[i]==0)
{
for (j=i*i; j<=maxim; j+=i*i)
f[j]=1;
}
}
for (i=2; i<=maxim; i++)
{
if (f[i]==0)
{
if (ciur[i]%2==0)
ok=-1;
else
ok=1;
sol+=1ll*ok*fr[i]*(fr[i]-1)/2;
}
}
fout<<1ll*n*(n-1)/2-sol;
return 0;
}