Cod sursa(job #1737660)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 4 august 2016 15:57:48
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>
#include<algorithm>
#define MAXVAL 1000010
using namespace std;
bool seen[MAXVAL],square[MAXVAL];
int prime[MAXVAL];
int main(){
    freopen("pairs.in","r",stdin);
    freopen("pairs.out","w",stdout);
    int n,biggest=0,x,i,j;
    long long answer=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&x);
        seen[x]=1;
        biggest=max(biggest,x);
    }
    for(i=2;i<=biggest;i++)
        if(!prime[i])
            for(j=i;j<=biggest;j+=i){
                prime[j]++;
                if(1LL*i*i<=biggest&&j%(i*i)==0)
                    square[j]=1;
            }
    for(i=1;i<=biggest;i++)
        if(!square[j]){
            x=0;
            for(j=i;j<=biggest;j+=i)
                if(seen[j])
                    x++;
            if(prime[i]&1==1)
                answer=answer-1LL*x*(x-1);
            else
                answer=answer+1LL*x*(x-1);
        }
    answer/=2;
    printf("%lld",answer);
    return 0;
}