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
#include <bits/stdc++.h>
#define int long long
using namespace std;


const int LCM = 2520;

int dp[19][2][LCM][(1 << 9)];
vector < int > q;

int rec(int pos, bool flg, int rem, int mask){
	//cout << pos << " " << flg << " " << rem << " " << mask << "\n";
	int& ans = dp[pos][flg][rem][mask];
	if(ans != -1) return ans;
	ans = 0;
	if(pos == (int)q.size()){
		ans = 1;
		for (int d = 1; d < 10; d++){
			if((mask >> (d - 1)) & 1){
				if(rem % d != 0){
					ans = 0;
				}
			}
		}
	}
	else{
		for(int d = 0; d < 10; d++){
			if(flg && d > q[pos]) continue;
			if (mask && d == 0) continue;
			bool new_flg = (flg == 1 ? d == q[pos] : 0);
			int new_rem = (rem * 10 + d) % LCM;
			int new_mask = mask;
			if (d != 0) new_mask |= (1 << (d - 1));
			ans += rec(pos + 1, new_flg, new_rem, new_mask);
		}
	}
	return ans;
}

int f(int n){
	q.clear();
	do{
		q.push_back(n % 10);
		n /= 10;
	}while(n > 0);
	reverse(q.begin(), q.end());
	memset(dp, -1, sizeof(dp));
	return rec(0, 1, 0, 0);
}

main(){
	ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int l, r;
	cin >> l >> r;
	cout << f(r) - f(l - 1) << "\n";
}