Cod sursa(job #2450684)

Utilizator CharacterMeCharacter Me CharacterMe Data 24 august 2019 11:36:13
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
///N=100000
///M=1000000
using namespace std;
///
typedef long long ll;
///
ll n, m, i, j, k, sol, mx;
ll ciur[1000001];
bitset<1000001> exists, p;
///
void read();
void solve();
void write();
void buildCiur();
void bkt(ll last, ll val, ll mp, bool get);
int main()
{
    read();
    solve();
    write();
    return 0;
}
void read(){
    freopen("pairs.in", "r", stdin);
    scanf("%lld", &n);
    for(i=1; i<=n; ++i) {
        ll x;
        scanf("%lld", &x);
        exists[x]=true;
        mx=max(mx, x);
    }
    fclose(stdin);
}
void solve(){
    buildCiur();
    for(i=2; i<=mx; ++i) if(!p[i]){
        ll total=0, mult;
        mult=((ciur[i]&1)?1:-1);
        for(j=i; j<=mx; j+=i) if(exists[j]) ++total;
        sol+=1LL*mult*total*(total-1)/2;
    }
}
void write(){
    freopen("pairs.out", "w", stdout);
    printf("%lld", n*(n-1)/2-sol);
    fclose(stdout);
}
void buildCiur(){
    for(i=2; i<=mx; ++i){
        if(ciur[i]) continue;
        for(j=i; j<=mx; j+=i) {
            ++ciur[j];
            if(!(j%(i*i))) p[j]=true;
        }
    }
}