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