Pagini recente » Cod sursa (job #679922) | Cod sursa (job #767346) | Cod sursa (job #1148271) | Cod sursa (job #2460820) | Cod sursa (job #2312481)
#include<fstream>
#include<vector>
#include<math.h>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
vector<long long> nrprime;
long long n;
long x[1000001];
char exista[1000001], ciur_marcat[1000001];
int main()
{
long i, j, maxim, a;
f>>n>>a;
maxim = a;
exista[a] = 1;
for(i = 1 ; i < n ; i++){
f>>a;
exista[a] = 1;
if(a > maxim)
maxim = a;
}
long long sol = ( n * (n - 1) ) / 2;
for(i = 2 ; i <= maxim ; i++){
if(x[i] == 0){
for(j = i ; j <= maxim ; j += i)
x[i] ++;
}
}
for(i = 2 ; i * i <= maxim ; i++){
for(j = i * i ; j <= maxim ; j += i * i)
x[i] = -1;
}
long nrNeprime = 0;
for(i = 2 ; i <= maxim ; i++){
if(x[i] >= 0){
nrNeprime = 0;
for(j = i ; j <= maxim ; j += i)
if(exista[j])
nrNeprime ++;
if(x[i] % 2 == 0)
sol += (nrNeprime * (nrNeprime - 1)) / 2;
else
sol -= (nrNeprime * (nrNeprime - 1)) / 2;
}
}
g<<sol;
return 0;
}