Pagini recente » Cod sursa (job #572451) | Cod sursa (job #80549) | Cod sursa (job #824026) | Cod sursa (job #1620174) | Cod sursa (job #1753293)
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
const int MAXP=1000001;
int N,v[MAXP],ap[MAXP],ciurn[MAXP],ciurp[MAXP],MAX=0;
long long int sol;
int main()
{
f>>N;
for(int i=1;i<=N;i++)
{
f>>v[i];
ap[v[i]]=1;
if(v[i]>MAX) MAX=v[i];
}
sol=1LL*N*(N-1)/2;
for(int i=2; i<=MAX; i++)
{
if(ciurn[i]==0)
for(int j=i; j<=MAX; j+=i)
ciurn[j]++;
if(ciurp[i]==0)
{
long long k=1ll*i*i;
for(long long j=k; j<=MAX; j+=k)
ciurp[j]=1;
long long rez=0;
for(int j=i;j<=MAX;j+=i)
if(ap[j]==1) rez++;
rez=rez*(rez-1)/2;
if(ciurn[i]%2==0)
sol+=rez;
else
sol-=rez;
}
}
g<<sol;
return 0;
}