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

using namespace std;

int main()
{
    long l, r, n = 0;
    long akt, c;
    int i, podziel[10];
    bool potycz;
    cin >> l >> r;

    for (i = 2; i <= 9; i++)
        podziel[i] = l % i;
    while (l <= r) {
        akt = l; i = 0; potycz = true;
        while (potycz && (akt > 0)) {
            c = akt % 10;
            switch (c) {
                case 0:
                    c = 1;
                    while (i > 0) {
                        c = c * 10 + 1;
                        akt *= 10;
                        i--;
                    }
                    potycz = false; c = akt + c - l;
                    break;
                case 1:
                    akt = (akt - c) / 10; i++;
                    break;
                default:
                    if (podziel[c] == 0) {
                        akt = (akt - c) / 10; i++;
                    }
                    else {
                        potycz = false; c = 1;
                    }
            }
        }
        if (potycz) { n++; c = 1; }
        //cout << l << " " << c << endl;
        l += c;
        for (i = 2; i <= 9; i++)
            podziel[i] = (podziel[i] + c) % i;
    }
    cout << n;

    return 0;
}