Pagini recente » Cod sursa (job #690584) | Cod sursa (job #2451723) | Cod sursa (job #1357751) | Cod sursa (job #851269) | Cod sursa (job #2314792)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
const int N = 1000002;
int v[N], ap[N];
bool c[N];
long long mx, n, rasp;
int main()
{
f >> n;
for(int i = 1; i <= n; i ++) {
f >> v[i];
if(v[i] > mx)
mx = v[i];
c[v[i]] = true;
}
for(long long i = 2; i <= mx; i ++)
if(!ap[i])
for(long long j = i; j <= mx; j += i)
ap[j] ++;
for(long long i = 2; i * i <= mx; i ++) {
for(long long j = i * i; j <= mx; j += i * i)
ap[j] = -N;
}
for(long long i = 2; i <= mx; i ++) {
if(ap[i] < 0)
continue;
long long rez = 0;
for(long long j = i; j <= mx; j += i)
if(c[j])
rez ++;
int k = rez * (rez - 1) / 2;
if(ap[i] % 2)
rasp += k;
else
rasp -= k;
}
g << n * (n - 1) / 2 - rasp;
return 0;
}