Cod sursa(job #1892760)

Utilizator cipri321Marin Ciprian cipri321 Data 25 februarie 2017 11:36:27
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#include <cstring>
using namespace std;
FILE *fi,*fo;
int n;
int i,j;
int F[1000001],E[1000001];
int A[100001],X[1000001];
int maxv;
bool ok;
int nrd;
long long rez;
int main()
{
    fi=fopen("pairs.in","r");
    fo=fopen("pairs.out","w");
    fscanf(fi,"%d",&n);
    for(i=1;i<=n;i++)
    {
        fscanf(fi,"%d",&A[i]);
        F[A[i]]++;
        if(maxv<A[i])
            maxv=A[i];
    }
    for(i=1;i<=maxv;i++)
        for(j=1;i*j<=maxv;j++)
            if(F[i*j]>0)
                X[i]++;
    memset(F,0,sizeof(F));
    for(i=2;i<=maxv;i++)
        if(!E[i])
        {
            for(j=i;j<=maxv;j+=i)
                E[j]++;
            for(j=i*i;j<=maxv;j+=i*i)
                F[j]++;
        }
    for(i=2;i<=maxv;i++)
        if(F[i] == 0)
        {
            nrd=E[i];
            if(nrd%2==0)
                rez-=(long long)X[i]*(X[i]-1)/2;
            else
                rez+=(long long)X[i]*(X[i]-1)/2;

        }
    fprintf(fo,"%d",n*(n-1)/2-rez);
    fclose(fi);
    fclose(fo);
    return 0;
}