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
// autor: Ryszard Gromek
#include <iostream>
using namespace std;

const int DZIEL_MAX = 1000000;

// szuka dzielnikow liczby [n] i zapisuje do [tab], zwraca [ile] dzielnikow
int dzielniki(int * tab, int n) 
{
	int ile = 0;

	int i;
	for (i = 1; i * i < n; i++)
	{
		if (n % i == 0)
		{
			*(tab++) = i;
			*(tab++) = n / i;
			ile += 2;
		}
	}
	if (i * i == n)
	{
		*tab = i;
		ile++;
	}

	return ile;
}

int main()
{
	int n;
	cin >> n;

	int tab[DZIEL_MAX]; // dzielniki liczby [a]
	int tab2[DZIEL_MAX]; // dzielniki liczby [n - a]

	int k = dzielniki(tab, n); // ilosc dzielnikow [a]

	int wynik = 0;

	for (int i = 0; i < k; i++)
	{
		int a = tab[i];
		int l = dzielniki(tab2, n - a); // ilosc dzielnikow [n - a]

		for (int j = 0; j < l; j++)
		{
			int b = tab2[j] * a;
			int c = n - a - b;
			if (b > a && c > b && c % b == 0) wynik++;
		}
	}

	cout << wynik << '\n';

	return 0;
}