Cod sursa(job #2240279)

Utilizator giotoPopescu Ioan gioto Data 12 septembrie 2018 21:45:51
Problema Pairs Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;

int n;
int a[100005], f[1000005], prim[1000005];
int main()
{
    freopen("pairs.in", "r", stdin);
    freopen("pairs.out", "w", stdout);

    scanf("%d", &n);
    for(int i = 1; i <= n ; ++i){
        scanf("%d", &a[i]);
        ++f[a[i]];
    }

    for(int i = 2; i <= 1000000 ; ++i){
        if(!prim[i]){
            for(int j = i; j <= 1000000 ; j += i){
                ++prim[j];
                if(j / i % i == 0) prim[j] -= 200000000;
            }
        }
    }

    long long Sol = 1LL * n * (n - 1) / 2;
    for(int i = 2; i <= 1000000 ; ++i){
        if(prim[i] <= 0) continue ;
        int nr = 0;
        for(int j = i; j <= 1000000 ; j += i)
            nr += f[j];
        if(prim[i] % 2) Sol = Sol - 1LL * nr * (nr - 1) / 2;
        else Sol = Sol + 1LL * nr * (nr - 1) / 2;
    }
    printf("%lld", Sol);

    return 0;
}