Pagini recente » Cod sursa (job #1166823) | Cod sursa (job #2250983) | Cod sursa (job #661655) | Cod sursa (job #665552) | Cod sursa (job #2312372)
#include<fstream>
#include<vector>
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
vector<long long> nrprime;
long long n;
long long a[100001], x[1000001];
char exista[1000001], ciur_marcat[1000001];
void ciur(long long n)
{
long i, j;
for(i = 2 ; i <= n ; i++){
if(ciur_marcat[i] == 0){
nrprime.push_back(i);
for(j = i + i ; j <= n ; j += i)
ciur_marcat[j] = 1;
}
}
}
long long numarFactoriPrimi(long long n)
{
long i;
long long nrFactori = 0;
bool ePrim = true;
for(i = 0 ; nrprime[i] <= n / 2 ; i++){
if(n % nrprime[i] == 0){
ePrim = false;
if(n % (nrprime[i] * nrprime[i]) == 0){
return -1;
}
else{
nrFactori ++;
}
}
}
if(ePrim == true)
return 1;
return nrFactori;
}
int main()
{
long i, j, maxim;
f>>n>>a[0];
maxim = a[0];
exista[a[0]] = 1;
for(i = 1 ; i < n ; i++){
f>>a[i];
exista[a[i]] = 1;
if(a[i] > maxim)
maxim = a[i];
}
for(i = 1 ; i <= maxim ; i++){
for(j = 1 ; j <= maxim / i ; j++){
if(exista[i * j]){
x[i] ++;
}
}
}
ciur(1000);
long long sol = ( n * (n - 1) ) / 2;
for(i = 2 ; i <= maxim ; i++){
if(x[i]){
long long p = numarFactoriPrimi(i);
if(p > 0){
if(p % 2 == 0){
sol += (x[i] * (x[i] - 1)) / 2;
}
else{
sol -= (x[i] * (x[i] - 1)) / 2;
}
}
}
}
g<<sol;
return 0;
}