Cod sursa(job #2260756)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 15 octombrie 2018 15:36:35
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#define VALMAX 1000005
using namespace std;
int f[VALMAX],v[VALMAX];
int main()
{
    FILE *fin=fopen ("pairs.in","r");
    FILE *fout=fopen ("pairs.out","w");
    int n,i,j,x,s;
    long long sol;
    fscanf (fin,"%d",&n);
    for (i=1;i<=n;i++){
        fscanf (fin,"%d",&x);
        f[x]=1;
    }
    for (i=2;i<=VALMAX;i++){
        if (!v[i]){
            v[i]=1;
            for (j=i+i;j<=VALMAX;j+=i)
                v[j]++;
        }
    }
    for (i=2;i*i<=VALMAX;i++){
        for (j=i*i;j<=VALMAX;j+=i*i)
            v[j]=0; // v[i]=1 doar daca i are doar fact prm distincti
    }
    sol=(long long)n*(n-1)/2;
    for (i=2;i<=VALMAX;i++){
        if (!v[i])
            continue;
        s=0;
        for (j=i;j<=VALMAX;j+=i)
            s+=f[j];
        if (v[i]%2==1)
            sol-=((long long)s*(s-1)/2);
        else sol+=((long long)s*(s-1)/2);
    }
    fprintf (fout,"%lld",sol);
    return 0;
}