Pagini recente » Cod sursa (job #672708) | Cod sursa (job #2752202) | Cod sursa (job #597503) | Cod sursa (job #351201) | Cod sursa (job #230785)
Cod sursa(job #230785)
//============================================================================
// Name : sprim.cpp
// Author : Vlad Tamas
// Version :
// Copyright : 2008
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <fstream>
#include <stdio.h>
#include <iostream>
#define NMAX 1000001
using namespace std;
int N, x[NMAX]={0}, Max;
long long sol, aux;
char P[NMAX]={0}, D[NMAX]={0}, R[NMAX]={0};
int max(int A,int B)
{
return A>B?A:B;
}
int main() {
int i,j;
ifstream f("pairs.in");
ofstream g("pairs.out");
f>>N;
for (i=1, Max=0; i<=N; ++i)
{
f>>j;
x[j]=1;
Max=max(Max,j);
}
sol=(long long)N*(N-1)/2;
for (i=2; i<=Max; ++i)
{
for (j=2; j<=(Max/i); ++j) x[i]+=x[i*j];
if (!P[i])
for (j=2, D[i]=1; j<=(Max/i); ++j)
{
P[j*i]=1;
D[j*i]=1-D[j*i];
if (j%i==0) R[j*i]=1;
}
if (R[i]) continue;
aux=(long long)x[i]*(x[i]-1)/2;
if (!D[i]) sol+=aux;
else sol-=aux;
}
g<<sol;
f.close();
g.close();
return 0;
}