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
#include <cstdio>
#include <algorithm>
#include <limits>

using namespace std;
typedef unsigned long long u64;

u64 k, a, b;

u64 dc[10];
u64 db[10];

u64 go(int digit, int remain, u64 sum) {
    if (digit == 10) {
        if (numeric_limits<u64>::max() / k > sum) {
            u64 n = sum * k;
            if (n >= a && n <= b) {
                for (int i = 1; i < 10; ++i) {
                    db[i] = 0;
                }
                while (n != 0) {
                    db[n%10] += 1;
                    n /= 10;
                }
                for (int i = 1; i < 10; ++i) {
                    if (dc[i] != db[i]) {
                        return 0;
                    }
                }
                return 1;
            }
        }
        return 0;
    }
    
    u64 result = 0;
    for (int i = 0; i <= remain; ++i) {
        dc[digit] = i;
        result += go(digit+1, remain-i, sum + i * digit * digit);
    }
    dc[digit] = 0;
    return result;
}

int main() {
    scanf("%llu %llu %llu", &k, &a, &b);
    printf("%llu\n", go(1, 18, 0));
    return 0;
}