Pagini recente » Cod sursa (job #3143263) | Cod sursa (job #2829925) | Cod sursa (job #1794136) | Cod sursa (job #1538039) | Cod sursa (job #116799)
Cod sursa(job #116799)
#include <cstdio>
#include <cstring>
using namespace std;
#define MAXN 1000100
#define llong long long
#define clear(a) (memset(a, 0, sizeof(a)))
int N, cnt[MAXN], Nr[MAXN];
char ok[MAXN], bad[MAXN];
llong res;
void ruleaza(void)
{
int i, j, k;
scanf("%d ", &N);
for(i = 1; i <= N; i++) scanf("%d ", &j), ok[j] = 1;
for(i = 2; i < MAXN; i++)
for(j = i; j < MAXN; j+=i)
cnt[i] += ok[j];
for(clear(ok), i = 2; i < MAXN; i++)
if(!ok[i])
for(j = i, k = i*i; j < MAXN; j+=i)
Nr[j]++, ok[j] = 1, bad[j] = (j%k == 0);
for(res = (llong)N*(N-1)/2, i = 2; i < MAXN; i++)
if(!bad[i])
res = res + (llong)cnt[i]*(cnt[i]-1)/2*(Nr[i]&1?-1:1);
printf("%lld\n", res);
}
int main(void)
{
freopen("pairs.in", "rt", stdin);
freopen("pairs.out", "wt", stdout);
ruleaza();
return 0;
}