Pagini recente » Cod sursa (job #1465049) | Cod sursa (job #1408637)
#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);
}