Pagini recente » Cod sursa (job #647887) | Cod sursa (job #1922694) | Cod sursa (job #1686915) | Cod sursa (job #2883188) | Cod sursa (job #918556)
Cod sursa(job #918556)
#include <fstream>
#include <cmath>
#include <vector>
#define pb push_back
#define N 1000000
using namespace std;
int neprim[N+2];
vector<int>divs;
int n, i, x, m, half, conf, prod, j, p, nr[N+2], primes[N+2];
long long rez;
void ciur()
{
int i, j;
for(i = 2; i <= N; i++)
if(!neprim[i])
{
neprim[i] = 1;
primes[++p] = i;
for(j = 2*i; j <= N; j += i) neprim[j]++;
}
}
int main()
{
ifstream fi("pairs.in");
ofstream fo("pairs.out");
fi >> n;
ciur();
for(i = 1; i <= n; i++)
{
fi >> x;
divs.clear();
half = sqrt(double(x));
for(j = 1; j <= p and primes[j] <= half and x; j++)
{
if(x%primes[j] == 0) divs.pb(primes[j]);
while(x%primes[j] == 0) x /= primes[j];
}
if(x) divs.pb(x);
m = divs.size();
for(conf = 1; conf < (1<<m); ++conf)
{
prod = 1;
for(j = 0; j < m; j++)
if(((1<<j) & conf) > 0) prod *= divs[j];
nr[prod]++;
}
}
for(i = 1; i <= N; i++)
{
m = neprim[i];
if(m%2) rez += nr[i]; else rez -= nr[i];
}
fo << rez << "\n";
return 0;
}