#include <stdio.h>
long get_xy_count(long a, long n) {
// solves amount of x and y such as x + xy = n/a - 1
long result = 0;
n = n/a - 1;
for (long x = 2; x * x <= n; x++) {
if (n % x == 0) {
long y = n/x - 1;
long x2 = n/x;
long y2 = x - 1;
if (x > 1 && y > 1) {
result++;
}
if (x2 > 1 && y2 > 1 && x2 != x) {
result++;
}
}
}
return result;
}
int main() {
long n;
long result = 0;
scanf("%ld", &n);
for (long a = 1; a * a <= n; a++) {
if (n % a == 0) {
result += get_xy_count(a, n);
if (a != n/a) {
result += get_xy_count(n/a, n);
}
}
}
printf("%ld\n", result);
};
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 <stdio.h> long get_xy_count(long a, long n) { // solves amount of x and y such as x + xy = n/a - 1 long result = 0; n = n/a - 1; for (long x = 2; x * x <= n; x++) { if (n % x == 0) { long y = n/x - 1; long x2 = n/x; long y2 = x - 1; if (x > 1 && y > 1) { result++; } if (x2 > 1 && y2 > 1 && x2 != x) { result++; } } } return result; } int main() { long n; long result = 0; scanf("%ld", &n); for (long a = 1; a * a <= n; a++) { if (n % a == 0) { result += get_xy_count(a, n); if (a != n/a) { result += get_xy_count(n/a, n); } } } printf("%ld\n", result); }; |
English