#include <bits/stdc++.h> using namespace std; vector<int> roz(int n) { vector<int> r; for (int i = 1; i * i <= n; i++) { if (n % i == 0) { r.push_back(i); r.push_back(n / i); } } int s = r.size(); if (s > 1 && r[s - 1] == r[s - 2]) r.pop_back(); sort(r.begin(), r.end()); return r; } int dwa(int n) { vector<int> div = roz(n); int res = 0; for (int i = 0; i < (int)div.size(); i++) { int t1 = div[i], t2 = n - div[i]; if (t1 != 1 && t1 < t2 && t2 % t1 == 0) res++; } return res; } int main () { int n; cin >> n; vector<int> div = roz(n); int res = 0; for (int i = 0; i < (int)div.size(); i++) { int t = n - div[i]; if (t % div[i] == 0) res += dwa(t / div[i]); } cout << res << endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <bits/stdc++.h> using namespace std; vector<int> roz(int n) { vector<int> r; for (int i = 1; i * i <= n; i++) { if (n % i == 0) { r.push_back(i); r.push_back(n / i); } } int s = r.size(); if (s > 1 && r[s - 1] == r[s - 2]) r.pop_back(); sort(r.begin(), r.end()); return r; } int dwa(int n) { vector<int> div = roz(n); int res = 0; for (int i = 0; i < (int)div.size(); i++) { int t1 = div[i], t2 = n - div[i]; if (t1 != 1 && t1 < t2 && t2 % t1 == 0) res++; } return res; } int main () { int n; cin >> n; vector<int> div = roz(n); int res = 0; for (int i = 0; i < (int)div.size(); i++) { int t = n - div[i]; if (t % div[i] == 0) res += dwa(t / div[i]); } cout << res << endl; return 0; } |