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
#include <iostream>

using namespace std;

// void printArray(int* arr);

int main() {

	ios_base::sync_with_stdio(0);

	int smallestArr[18];
	int smallestArrInx = 0;
	long long int k, a, b, tempA;
	cin >> k >> a >> b;

	tempA = a;

	while (tempA) {
		smallestArr[smallestArrInx++] = tempA % 10;
		tempA /= 10;
	}

	long long int result = 0;
	long long int tempResult = 0;
	bool addOne = false;

	while(a <= b) {
		tempResult = 0;
		// count sum
		for (int i = 0; i < smallestArrInx; i++)
			tempResult += smallestArr[i]*smallestArr[i];
		// check for result
		if (k*tempResult == a)
			result++;
		// add 1
		a++;
		addOne = true;
		for (int i = 0; i < 18; ++i) {
			if (!addOne)
				break;
			if (smallestArr[i] == 9)
				smallestArr[i] = 0;
			else {
				++smallestArr[i];
				addOne = false;
			}
			if (i > smallestArrInx)
				++smallestArrInx;
		}
	}

	cout << result;

	return 0;
}