Pagini recente » Cod sursa (job #1537526) | Cod sursa (job #612914) | Cod sursa (job #713641) | Cod sursa (job #1783949) | Cod sursa (job #213445)
Cod sursa(job #213445)
#include <stdio.h>
#include <vector>
#define N 1000100
using namespace std;
vector <bool> m(N);
int n, nr[N],v;
long long sol;
inline long long combinari(long long x) { return x*(x-1)/2; }
void read()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%d", &n);
int t;
for (int i = 1; i <= n; ++ i)
{
scanf("%d", &t);
m[t] =1;
}
sol=combinari(n);
}
void solve()
{
//int j;
for (int i = 2; i < N; ++i)
{
v=0;
if (nr[i] == -1)
continue;
if (nr[i] == 0)
for (int j = i; j < N; j+=i)
{
if(nr[j] != -1)
++nr[j];
}
//int j;
for (int j = i; j < N; j+=i)
{
if(m[j])
++v;
}
if(i>1000)
continue;
int k = i*i;
for (int j = k; j < N; j+=k)
nr[j] = -1;
if (nr[i]%2 == 0)
sol+=combinari(v);
else
sol-=combinari(v);
}
}
void print(){ printf("%lld\n", sol); }
int main()
{
read();
solve();
print();
return 0;
}