Pagini recente » Cod sursa (job #1196668) | Cod sursa (job #979174) | Cod sursa (job #1117975) | Cod sursa (job #386855) | Cod sursa (job #2259983)
#include <fstream>
#define N 1000000
using namespace std;
bool fr[N+5],prim[N+5];
int ok[N+5];
int nrdivprim[N+5];
void CIUR()
{
for(int i=2;i<=N;i++)
ok[i]=1;
for(int i=2;i<=N;i++)
if(prim[i]==0)
{
nrdivprim[i]=1;
ok[i]=1;
for(int j=2*i;j<=N;j+=i)
{
prim[j]=1;
nrdivprim[j]++;
if((j/i)%i==0)
ok[j]=0;
}
}
}
int main()
{
ifstream f("pairs.in");
ofstream g("pairs.out");
int n,maxi=0;
f>>n;
for(int i=1;i<=n;i++)
{
int x;
f>>x;
maxi=max(maxi,x);
fr[x]=1;
}
long long sum=0;
CIUR();
for(int i=2;i<=maxi;i++)
{
if(ok[i]==0)
continue;
int k=0;
for(int j=i;j<=maxi;j+=i)
k+=fr[j];
if(nrdivprim[i]%2==1)
sum+=1LL*k*(k-1)/2;
else
sum-=1LL*k*(k-1)/2;
}
g<<1LL*n*(n-1)/2-sum;
return 0;
}