Pagini recente » Cod sursa (job #2409037) | Cod sursa (job #1636595) | Cod sursa (job #1882551) | Cod sursa (job #207550) | Cod sursa (job #1946307)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr int maxn = 1e6 + 100;
char nr_prime_divs[maxn] = {}, is_bad[maxn] = {};
int nr_mults[maxn] = {};
ifstream f("pairs.in");
ofstream g("pairs.out");
int main(){
int n;
f >> n;
for(int x; n; --n) f >> x, nr_mults[x] = 1;
memset(nr_prime_divs, 1, maxn);
nr_prime_divs[1] = 0;
for(int i = 1; i < maxn; ++i){
for(int j = 2; j <= i && i*j < maxn; ++j)
nr_prime_divs[i*j] = nr_prime_divs[i] + nr_prime_divs[j];
if(nr_prime_divs[i] == 1 && i <= 1000)
is_bad[i*i] = 1;
if(is_bad[i] == 1) for(int j = 2*i; j < maxn; j += i)
is_bad[j] = 2;
else for(int j = 2*i; j < maxn; j += i)
nr_mults[i] += nr_mults[j]; }
ll rez = 0;
for(int i = 1; i < maxn; ++i)
if(!is_bad[i]) rez += (nr_prime_divs[i]%2 ? -1ll : 1ll) *
nr_mults[i] * (nr_mults[i] - 1ll) / 2ll;
g << rez << endl;
return 0; }