Cod sursa(job #3271139)

Utilizator FlaviuuuFlaviu Flaviuuu Data 25 ianuarie 2025 11:02:26
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <set>
#include <queue>
#include <map>
using namespace std;
ifstream cin("pairs.in");
ofstream cout("pairs.out");
#define ll long long
#define int long long
bool spf[1000001];
int fr[1000001];
short mobius[1000001];
ll a[1000005];
void ciur()
{
    spf[0] = spf[1] = 1;
    for(int i = 0; i <= 1000000; i++)
        mobius[i] = 1;
    for(int i = 2; i <= 1000000; i++)
    {
        if(spf[i] == 0)
            for(int j = i; j <= 1000000; j += i)
            {
                spf[j] = 1;
                if(j / i % i == 0)
                    mobius[j] = 0;
                mobius[j] *= -1;
            }
        spf[i] = 0;
    }
}
signed main()
{
    ciur();
    ll n;
    cin>>n;
    for(int i = 1; i <= n; i++)
        cin>>a[i], fr[a[i]]++;
    ll ans = 0;
    ll cnt = 0;
    for(int i = 2; i <= 1000000; i++)
    {
        cnt = 0;
        for(int j = i; j <= 1000000; j += i)
            cnt = cnt + fr[j];
        ans -= 1ll * mobius[i] * cnt * (cnt - 1) / 2;
    }
    cout<<n*(n-1)/2 - ans;
    return 0;
}