Cod sursa(job #1410825)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 31 martie 2015 12:05:09
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<fstream>
#include<bitset>
using namespace std;
int n, i, j, nr, x, maxim;
long long sum;
bitset<1000001> f, ok;
int v[1000001];
ifstream fin("pairs.in");
ofstream fout("pairs.out");
int main(){
    fin>> n;
    for(i = 1; i <= n; i++){
        fin>> x;
        f[x] = 1;
        maxim = max(maxim, x);
    }
    for(i = 2; i <= maxim; i++){
        if(v[i] == 0){
            nr = f[i];
            for(j = i + i; j <= maxim; j += i){
                nr += f[j];
                v[j]++;
                if(j % (i * i) == 0){
                    ok[j] = 1;
                }
            }
            sum += nr * 1LL * (nr - 1) / 2;
        }
        else{
            if(ok[i] == 0){
                nr = 0;
                for(j = i; j <= maxim; j += i){
                    nr += f[j];
                }
                if(v[i] % 2 == 1){
                    sum += nr * 1LL * (nr - 1) / 2;
                }
                else{
                    sum -= nr * 1LL * (nr - 1) / 2;
                }
            }
        }
    }
    sum = n * 1LL * (n - 1) / 2 - sum;
    fout<< sum <<"\n";
    return 0;
}