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
import java.math.BigInteger;
import java.util.Scanner;


class row {
	
	final static int MAX_SUM = 9 * 9 * 18;
	
	static BigInteger k;
	static BigInteger a;
	static BigInteger b;
	
	public static void main(String[] args) {
		readKAB();
		int counter = 0;
		for(Integer i = 0; i <= MAX_SUM; ++i) {
			BigInteger kTimesI = k.multiply(new BigInteger(i.toString()));
			
			if (kTimesI.compareTo(a) >= 0 && kTimesI.compareTo(b) <= 0) {
				Integer sqSumKTimesI =  calculateSqSum(kTimesI);
				BigInteger kTimesSqSumKTimesI = k.multiply(new BigInteger(sqSumKTimesI.toString()));
				
				if (kTimesI.compareTo(kTimesSqSumKTimesI) == 0) {
					counter++;
				}
				
				
			}
		}
		
		System.out.println(counter);
	}

	private static int calculateSqSum(BigInteger number) {
		int sum = 0;
		String numStr = number.toString();
		
		for (int i = 0; i < numStr.length(); ++i) {
			int digit = Character.getNumericValue(numStr.charAt(i));			
			sum += digit*digit;			
		}
		return sum;
	}

	private static void readKAB() {
		Scanner scanner = new Scanner(System.in);
		k = scanner.nextBigInteger();
		a = scanner.nextBigInteger();
		b = scanner.nextBigInteger();		
	}
}