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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>

using namespace std;

bool check_if_divisor(uint32_t n, uint32_t a)
{
    if (n%a==0)
        return true;
    else
        return false;
}


int main()
{
    uint32_t n, a, k, m, suma, n2, k2, m2;
    // n = a+b+c = a(1+k(1+m)), gdzie b=k*a, c=m*k*a i k>1 i m>1

//    // debug ///////////
//    for (int ii=0; ii<100; ii++)
//    {
//    // //////////////////

    cin>>n;
    suma=0;

    for (a=1; a<=n/7; a++)
        if (check_if_divisor(n,a))
        {
            n2 = n/a-1; // n2=k*(m+1), k>=2 i m>=2
//            for (k=2; k<=n2/3; k++)
            for (k=2; k*k<=n2; k++)
                if (check_if_divisor(n2, k))
                {
                    // first solution
                    m = n2/k-1;
                    if (m>1)
                    {
                        suma++;
                    }

                    // second solution
                    k2 = n2/k;
                    m2 = k-1; // = n2/k2-1
                    if (k2!=k && m2>1)
                    {
                        suma++;
                    }
                }
        }

    cout << suma<<endl;

//    // debug ////////////
//    }
//    // //////////////////

    return 0;
}