#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); }; |