Pagini recente » Cod sursa (job #1138061) | Cod sursa (job #2976411) | Cod sursa (job #28707) | Cod sursa (job #1286205) | Cod sursa (job #1018705)
#include <fstream>
#define maxn 100001
#define maxv 1000001
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
int a[maxn],n,t,prod=1;
int sieve[maxv],v[maxv];
int p[maxn],nr[maxn],maxval;
long long s;
void erathostenes ()
{
for (int i=2; i<=maxval; ++i)
{
if (v[i])
{
if (!sieve[i]) p[++t] = i;
nr[i] ++;
}
for (int j=i+i; j<=maxval; j+=i)
{
if (v[j])
{
if (!sieve[i] && !nr[i]) p[++t] = i;
nr[i] ++;
}
sieve[j] = 1;
}
}
}
void back (int k, int cnt)
{
if (prod > maxval)
return;
/*for (int i=k; i<=t; ++i)
{
prod *= p[i];
back (i+1,cnt+1);
prod /= p[i];
}
if (cnt%2)
{
s += nr[prod]*(nr[prod]-1)/2;
}
else
{
s -= nr[prod]*(nr[prod]-1)/2;
}*/
}
int main()
{
fin>>n;
for (int i=1; i<=n; ++i)
{
fin>>a[i];
v[a[i]]=1;
maxval = max (a[i],maxval);
}
erathostenes ();
back (1,0);
fout<<1LL*n*(n-1)/2-s;
}