Cod sursa(job #2487049)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 3 noiembrie 2019 20:20:36
Problema Pairs Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>

using namespace std;

typedef long long ll;
const int N = 1000000 + 7;
int n, f[N], mx;
ll p[N];

int main()
{
    freopen ("pairs.in", "r", stdin);
    freopen ("pairs.out", "w", stdout);

    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        int x;
        scanf("%d", &x);
        f[x]++;
        if (x > mx)
        {
            mx = x;
        }
    }

    for (int i = 1; i <= mx; i++)
    {
        for (int j = 2 * i; j <= mx; j += i)
        {
            f[i] += f[j];
        }
    }

    for (int i = mx; i >= 1; i--)
    {
        if (f[i])
        {
            p[i] = f[i] * (ll) (f[i] + 1) / 2;
            for (int j = 2 * i; j <= mx; j += i)
            {
                p[i] -= p[j];
            }
        }
    }

    printf("%lld\n", p[1]);

    return 0;
}