Pagini recente » Cod sursa (job #872880) | Cod sursa (job #1918528) | Monitorul de evaluare | Cod sursa (job #2362850) | Cod sursa (job #2261418)
#include <fstream>
#define DIM 100005
#define DIMC 1000005
using namespace std;
ifstream in ("pairs.in");
ofstream out("pairs.out");
int maxim = -1;
int ciur[DIMC + 10];
int viz[DIMC + 10];
long long notPrime, n;
void CalcCiur(){
for(int i = 2; i <= DIMC; ++ i){
if(!ciur[i]){
ciur[i] = 1;
for(int j = i + i; j <= DIMC; j += i){
++ ciur[j];
}
}
}
for(int i = 2; i * i <= DIMC; ++ i){
for(int j = i * i; j <= DIMC; j += i * i)
ciur[j] = 0;
}
}
int main()
{
in>>n;
int x = 0;
for(int i = 1; i <= n; ++ i){
in>>x;
viz[x] = 1;
maxim = max(x, maxim);
}
CalcCiur();
long long Prime = (long long)n * (n - 1) / 2;
long long nr = 0;
for(int i = 2; i <= DIMC; ++ i){
if(ciur[i] > 0){
nr = 0;
for(int j = i; j <= DIMC; j += i)
nr += viz[j];
if(ciur[i] % 2){
Prime -= (long long)nr * (nr - 1) / (2);
}
else{
Prime += (long long)nr * (nr - 1) / (2);
}
}
}
out<<Prime;
return 0;
}