Cod sursa(job #1408637)

Utilizator robertstrecheStreche Robert robertstreche Data 30 martie 2015 09:53:52
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#include <bitset>

#define NR_APAR 1005
#define NMAX 1000005

using namespace std;

int n,nr,x,ma;
long long nr_total;
int ap[NMAX],nr_prim[NR_APAR];

bitset <NMAX>prim;

inline void ciur(int ma)
{
    for (int i=2;i*i<=ma;i++)
      if (prim[i]==0)
       for (int j=i*i;j<=ma;j+=i)
         prim[j]=1;
    nr_prim[1]=2;nr=1;
    for (int i=3;i<=ma;i+=2)
      if (!prim[i])nr_prim[++nr]=i;
}
int main()
{
    freopen("pairs.in","r",stdin);
    freopen("pairs.out","w",stdout);

    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%d",&x);
        ap[x]=1;
        ma=max(ma,x);
    }
    ciur(ma);
    nr_total=n*(n-1)/2;
    for (int i=1;nr_prim[i]<=ma && i<=nr;i++)
    {
        int number=0;
        for (int j=nr_prim[i];j<=ma;j++)
         if (ap[j] && j%nr_prim[i]==0)number++;
        nr_total-=number*(number-1)/2;
    }
    printf("%lld",nr_total);
    fclose(stdin);
    fclose(stdout);

}