Pagini recente » Cod sursa (job #1366479) | Cod sursa (job #1133548) | Cod sursa (job #3167364) | Cod sursa (job #2562632) | Cod sursa (job #3261492)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
const int Nmax = 1e5 + 5, Vmax = 1e6 + 5;
ifstream cin("pairs.in");
ofstream cout("pairs.out");
int v[Nmax], f[Vmax], m[Vmax], c[Vmax];
vector<int> divi;
void precalc()
{
for(int i = 1; i < Vmax; i ++)
for(int j = i; j < Vmax; j += i)
m[i] += f[j];
}
void getdivi(int a)
{
divi.clear();
for(int i = 1; i * i <= a; i ++)
{
if(a % i == 0)
{
divi.push_back(i);
if(i != a / i)
divi.push_back(a / i);
}
}
sort(divi.begin(), divi.end());
}
int main()
{
long long n, i, ans = 0, j, k;
cin >> n;
for(i = 1; i <= n; i ++)
{
cin >> v[i];
f[v[i]] ++;
}
precalc();
for(i = 1; i <= n; i ++)
{
getdivi(v[i]);
for(j = 0; j < divi.size(); j ++)
c[divi[j]] = m[divi[j]];
for(j = divi.size() - 1; j >= 0; j --)
for(k = j + 1; k < divi.size(); k ++)
if(divi[k] % divi[j] == 0)
c[divi[j]] -= c[divi[k]];
ans += c[1];
}
cout << ans / 2;
return 0;
}