Pagini recente » Diferente pentru problema/parc intre reviziile 10 si 1 | Diferente pentru problema/cercuri2 intre reviziile 8 si 7 | Diferente pentru preoni-2006 intre reviziile 26 si 22 | Monitorul de evaluare | Cod sursa (job #3282692)
#include <bits/stdc++.h>
using namespace std;
int n, v[100001];
int nr[1000001];
int solve(int pairs, int n) {
vector<int> v;
if (n % 2 == 0) {
++nr[2];
v.push_back(2);
}
while (n % 2 == 0) {
n /= 2;
}
for (int i = 3; i * i <= n; ++i) {
if (n % i == 0) {
++nr[i];
v.push_back(i);
}
while (n % i == 0) {
n /= i;
}
}
if (n != 1) {
++nr[n];
v.push_back(n);
n /= n;
}
for (auto i : v) {
pairs -= (nr[i] - 1);
}
return pairs;
}
int main() {
ifstream cin("pairs.in");
ofstream cout("pairs.out");
cin >> n;
int ans = 0;
for (int i = 1; i <= n; ++i) {
cin >> v[i];
ans += solve(i - 1, v[i]);
}
cout << ans;
}