Pagini recente » Cod sursa (job #642188) | Cod sursa (job #1103710) | Cod sursa (job #3269682) | Cod sursa (job #1111795) | Cod sursa (job #1757710)
#include <iostream>
#include <fstream>
using namespace std;
int N, Max, M[1000001];
int ndiv[1000001], ndif[1000001];
int main()
{
ifstream f("pairs.in");
ofstream g("pairs.out");
f >> N;
long long card = 0;
int i, x;
for(i = 1; i <= N; i++)
{
f >> x;
M[x] = 1;
if(x > Max) Max = x;
}
for(i = 2; i <= Max; i++)
{
if(ndiv[i] == 0)
{
for(int j = i; j <= Max; j += i)
ndiv[j]++;
}
if(ndif[i] == 0)
{
long long ii = 1LL * i * i;
for(long long j = ii; j <= Max; j += ii)
ndif[j] = 1;
long long rez = 0;
for(int j = i; j <= Max; j += i)
if(M[j] == 1) rez++;
long long t = rez * (rez - 1) / 2;
if(ndiv[i] % 2 == 0)
card -= t;
else
card += t;
}
}
g << 1LL*N*(N-1)/2-card;
f.close();
g.close();
return 0;
}