Pagini recente » Cod sursa (job #1841316) | Cod sursa (job #535404) | Cod sursa (job #474586) | Cod sursa (job #3273292) | Cod sursa (job #918587)
Cod sursa(job #918587)
#include <fstream>
#include <iostream>
#include <cmath>
#include <vector>
#define pb push_back
#define N 1000000
using namespace std;
bool neprim[N+2];
vector<int>divs;
int card, n, last, i, x, m, half, conf, prod, j, p, nr[N+2], primes[N+2], gd[N+2];
long long rez;
void descompune(int x)
{
if(x == 1) return;
if(gd[x] != last) divs.pb(gd[x]);
last = gd[x];
descompune(x/gd[x]);
}
void ciur()
{
int i, j;
for(i = 2; i <= N; i++)
if(!neprim[i])
{
primes[++p] = i;
gd[i] = i;
for(j = 2*i; j <= N; j += i)
{
neprim[j] = 1;
gd[j] = i;
}
}
}
int main()
{
ifstream fi("pairs.in");
ofstream fo("pairs.out");
fi >> n;
ciur();
for(i = 1; i <= n; i++)
{
fi >> x;
divs.clear();
last = 0;
descompune(x);
m = divs.size();
rez += i-1;
for(conf = 1; conf < (1<<m); ++conf)
{
prod = 1;
for(j = 0, card = 0; j < m; j++)
if(((1<<j) & conf) > 0)
{
prod *= divs[j];
card++;
}
if(card % 2) rez -= 1LL*nr[prod]; else rez += 1LL*nr[prod];
nr[prod]++;
}
}
fo << rez << "\n";
return 0;
}