/* Authors: Vu Hoang Bach from Phuoc Hoa Secondary School */
/* Enjoy TheFatRat's music while reading my code. Link: https://w...content-available-to-author-only...e.com/watch?v=GCx9FU59FJc&t=669s */
//#pragma GCC optimize("O3", "unroll-loops")
//#pragma GCC target("avx2", "bmi", "bmi2", "lzcnt", "popcnt")
#include <bits/stdc++.h>
#define ldb long double
//#define double ldb
#define db double
#define unomap unordered_map
#define unoset unordered_set
#define endl '\n'
#define str string
#define strstr stringstream
#define sz(a) a.size()
#define ll long long
//#define int ll
#define pii pair <int, int>
#define pll pair <ll, ll>
#define Unique(a) a.resize(unique(all(a)) - a.begin())
#define ull unsigned ll
#define fir first
#define sec second
#define idc cin.ignore()
#define lb lower_bound
#define ub upper_bound
#define all(s) s.begin(), s.end()
#define rev reverse
#define sigma ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define skibidi int main
#define rizz signed main
#define gcd __gcd
#define found(a, mp) mp.find(a) != mp.end()
#define game_over exit(0);
#define stfu return 0;
#define stop break;
#define pushb push_back
#define popb pop_back
#define pushf push_front
#define popf pop_front
#define mul2x(a, x) a << x
#define div2x(a, x) a >> x
#define no_check continue;
#define lcm(a, b) a / __gcd(a, b) * b
#define log_base(x, base) log(x) / log(base)
#define debug clog << "No errors!"; game_over;
#define forw(i, a, b) for (int i = a; i <= b; ++i)
#define forw2(i, a, b) for (ll i = a; i <= b; ++i)
#define fors(i, a, b) for (int i = a; i >= b; --i)
#define fors2(i, a, b) for (ll i = a; i >= b; --i)
#define meme memset
#define pqueue priority_queue
#define sqrt sqrtl
#define name "test"
#define want_digit(x) cout << fixed << setprecision(x);
#define excuting_time 1000.0 * clock() / CLOCKS_PER_SEC
using namespace std;
const int MOD = 1e9 + 7; // 998244353
const int inf = 1e9;
const ll INF = 1e18;
const int N = 9;
const int K = 45;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll random(const ll &L, const ll &R)
{
return uniform_int_distribution<ll> (L, R) (rng);
}
vector<int> v;
bool is_prime[K + 5];
void sieve(const int &lim)
{
is_prime[0] = is_prime[1] = true;
for (int i = 2; i * i <= lim; ++i)
if (!is_prime[i])
for (int j = i * i; j <= lim; j += i) is_prime[j] = true;
}
bool check_prime(int x)
{
if (x < 2) return false;
return !is_prime[x];
}
int dp[N + 5][K + 5][K + 5][2];
int f(int pos, int even, int odd, bool ok)
{
if (pos == sz(v))
return check_prime(even - odd);
int &tmp = dp[pos][even][odd][ok];
if (tmp != -1) return tmp;
tmp = 0;
int fin = (ok ? 9 : v[pos]);
forw(i, 0, fin)
tmp += f(pos + 1, even + i * (!(pos & 1)), odd + i * (pos & 1), (ok | i < fin));
return tmp;
}
int calc(int n)
{
v.clear();
forw(i,1,10) v.pushb(n % 10), n /= 10;
reverse(all(v));
meme(dp, -1, sizeof(dp));
return f(0, 0, 0, 0);
}
int a, b;
void cook()
{
cin >> a >> b;
if (a > b) swap(a, b);
cout << calc(b) - calc(a - 1) << endl;
}
skibidi()
//rizz()
{
srand(time(NULL));
sigma;
/*
if (fopen(name".INP", "r"))
{
freopen(name".INP", "r", stdin);
freopen(name".OUT", "w", stdout);
}
*/
sieve(K);
int numTest = 1;
// cin >> numTest;
while (numTest--)
{
cook();
}
stfu;
}
LyogQXV0aG9yczogVnUgSG9hbmcgQmFjaCBmcm9tIFBodW9jIEhvYSBTZWNvbmRhcnkgU2Nob29sICovCi8qIEVuam95IFRoZUZhdFJhdCdzIG11c2ljIHdoaWxlIHJlYWRpbmcgbXkgY29kZS4gTGluazogaHR0cHM6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLmNvbS93YXRjaD92PUdDeDlGVTU5RkpjJnQ9NjY5cyAqLwoKLy8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiTzMiLCAidW5yb2xsLWxvb3BzIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIiLCAiYm1pIiwgImJtaTIiLCAibHpjbnQiLCAicG9wY250IikKCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojZGVmaW5lIGxkYiBsb25nIGRvdWJsZQovLyNkZWZpbmUgZG91YmxlIGxkYgojZGVmaW5lIGRiIGRvdWJsZQojZGVmaW5lIHVub21hcCB1bm9yZGVyZWRfbWFwCiNkZWZpbmUgdW5vc2V0IHVub3JkZXJlZF9zZXQKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBzdHIgc3RyaW5nCiNkZWZpbmUgc3Ryc3RyIHN0cmluZ3N0cmVhbQojZGVmaW5lIHN6KGEpIGEuc2l6ZSgpCiNkZWZpbmUgbGwgbG9uZyBsb25nCi8vI2RlZmluZSBpbnQgbGwKI2RlZmluZSBwaWkgcGFpciA8aW50LCBpbnQ+CiNkZWZpbmUgcGxsIHBhaXIgPGxsLCBsbD4KI2RlZmluZSBVbmlxdWUoYSkgYS5yZXNpemUodW5pcXVlKGFsbChhKSkgLSBhLmJlZ2luKCkpCiNkZWZpbmUgdWxsIHVuc2lnbmVkIGxsCiNkZWZpbmUgZmlyIGZpcnN0CiNkZWZpbmUgc2VjIHNlY29uZAojZGVmaW5lIGlkYyBjaW4uaWdub3JlKCkKI2RlZmluZSBsYiBsb3dlcl9ib3VuZAojZGVmaW5lIHViIHVwcGVyX2JvdW5kCiNkZWZpbmUgYWxsKHMpIHMuYmVnaW4oKSwgcy5lbmQoKQojZGVmaW5lIHJldiByZXZlcnNlCiNkZWZpbmUgc2lnbWEgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKSwgY2luLnRpZSgwKSwgY291dC50aWUoMCk7CiNkZWZpbmUgc2tpYmlkaSBpbnQgbWFpbgojZGVmaW5lIHJpenogc2lnbmVkIG1haW4KI2RlZmluZSBnY2QgX19nY2QKI2RlZmluZSBmb3VuZChhLCBtcCkgbXAuZmluZChhKSAhPSBtcC5lbmQoKQojZGVmaW5lIGdhbWVfb3ZlciBleGl0KDApOwojZGVmaW5lIHN0ZnUgcmV0dXJuIDA7CiNkZWZpbmUgc3RvcCBicmVhazsKI2RlZmluZSBwdXNoYiBwdXNoX2JhY2sKI2RlZmluZSBwb3BiIHBvcF9iYWNrCiNkZWZpbmUgcHVzaGYgcHVzaF9mcm9udAojZGVmaW5lIHBvcGYgcG9wX2Zyb250CiNkZWZpbmUgbXVsMngoYSwgeCkgYSA8PCB4CiNkZWZpbmUgZGl2MngoYSwgeCkgYSA+PiB4CiNkZWZpbmUgbm9fY2hlY2sgY29udGludWU7CiNkZWZpbmUgbGNtKGEsIGIpIGEgLyBfX2djZChhLCBiKSAqIGIKI2RlZmluZSBsb2dfYmFzZSh4LCBiYXNlKSBsb2coeCkgLyBsb2coYmFzZSkKI2RlZmluZSBkZWJ1ZyBjbG9nIDw8ICJObyBlcnJvcnMhIjsgZ2FtZV9vdmVyOwojZGVmaW5lIGZvcncoaSwgYSwgYikgZm9yIChpbnQgaSA9IGE7IGkgPD0gYjsgKytpKQojZGVmaW5lIGZvcncyKGksIGEsIGIpIGZvciAobGwgaSA9IGE7IGkgPD0gYjsgKytpKQojZGVmaW5lIGZvcnMoaSwgYSwgYikgZm9yIChpbnQgaSA9IGE7IGkgPj0gYjsgLS1pKQojZGVmaW5lIGZvcnMyKGksIGEsIGIpIGZvciAobGwgaSA9IGE7IGkgPj0gYjsgLS1pKQojZGVmaW5lIG1lbWUgbWVtc2V0CiNkZWZpbmUgcHF1ZXVlIHByaW9yaXR5X3F1ZXVlCiNkZWZpbmUgc3FydCBzcXJ0bAojZGVmaW5lIG5hbWUgInRlc3QiCiNkZWZpbmUgd2FudF9kaWdpdCh4KSBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbih4KTsKI2RlZmluZSBleGN1dGluZ190aW1lIDEwMDAuMCAqIGNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsgLy8gOTk4MjQ0MzUzCmNvbnN0IGludCBpbmYgPSAxZTk7CmNvbnN0IGxsIElORiA9IDFlMTg7CmNvbnN0IGludCBOID0gOTsKY29uc3QgaW50IEsgPSA0NTsKCm10MTk5MzdfNjQgcm5nKGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSk7CmxsIHJhbmRvbShjb25zdCBsbCAmTCwgY29uc3QgbGwgJlIpCnsKICAgIHJldHVybiB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248bGw+IChMLCBSKSAocm5nKTsKfQoKdmVjdG9yPGludD4gdjsKCmJvb2wgaXNfcHJpbWVbSyArIDVdOwp2b2lkIHNpZXZlKGNvbnN0IGludCAmbGltKQp7CiAgICBpc19wcmltZVswXSA9IGlzX3ByaW1lWzFdID0gdHJ1ZTsKICAgIGZvciAoaW50IGkgPSAyOyBpICogaSA8PSBsaW07ICsraSkKICAgICAgICBpZiAoIWlzX3ByaW1lW2ldKQogICAgICAgICAgICBmb3IgKGludCBqID0gaSAqIGk7IGogPD0gbGltOyBqICs9IGkpIGlzX3ByaW1lW2pdID0gdHJ1ZTsKfQoKYm9vbCBjaGVja19wcmltZShpbnQgeCkKewogICAgaWYgKHggPCAyKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gIWlzX3ByaW1lW3hdOwp9CgppbnQgZHBbTiArIDVdW0sgKyA1XVtLICsgNV1bMl07CmludCBmKGludCBwb3MsIGludCBldmVuLCBpbnQgb2RkLCBib29sIG9rKQp7CiAgICBpZiAocG9zID09IHN6KHYpKQogICAgICAgIHJldHVybiBjaGVja19wcmltZShldmVuIC0gb2RkKTsKCiAgICBpbnQgJnRtcCA9IGRwW3Bvc11bZXZlbl1bb2RkXVtva107CiAgICBpZiAodG1wICE9IC0xKSByZXR1cm4gdG1wOwogICAgdG1wID0gMDsKICAgIGludCBmaW4gPSAob2sgPyA5IDogdltwb3NdKTsKICAgIGZvcncoaSwgMCwgZmluKQogICAgICAgIHRtcCArPSBmKHBvcyArIDEsIGV2ZW4gKyBpICogKCEocG9zICYgMSkpLCBvZGQgKyBpICogKHBvcyAmIDEpLCAob2sgfCBpIDwgZmluKSk7CiAgICByZXR1cm4gdG1wOwp9CgppbnQgY2FsYyhpbnQgbikKewogICAgdi5jbGVhcigpOwogICAgZm9ydyhpLDEsMTApIHYucHVzaGIobiAlIDEwKSwgbiAvPSAxMDsKICAgIHJldmVyc2UoYWxsKHYpKTsKCiAgICBtZW1lKGRwLCAtMSwgc2l6ZW9mKGRwKSk7CiAgICByZXR1cm4gZigwLCAwLCAwLCAwKTsKfQoKaW50IGEsIGI7CnZvaWQgY29vaygpCnsKICAgIGNpbiA+PiBhID4+IGI7CiAgICBpZiAoYSA+IGIpIHN3YXAoYSwgYik7CiAgICBjb3V0IDw8IGNhbGMoYikgLSBjYWxjKGEgLSAxKSA8PCBlbmRsOwp9Cgpza2liaWRpKCkKLy9yaXp6KCkKewogICAgc3JhbmQodGltZShOVUxMKSk7CiAgICBzaWdtYTsKICAgIC8qCiAgICBpZiAoZm9wZW4obmFtZSIuSU5QIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKG5hbWUiLklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4obmFtZSIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQogICAgKi8KICAgIHNpZXZlKEspOwogICAgaW50IG51bVRlc3QgPSAxOwovLyAgICBjaW4gPj4gbnVtVGVzdDsKICAgIHdoaWxlIChudW1UZXN0LS0pCiAgICB7CiAgICAgICAgY29vaygpOwogICAgfQogICAgc3RmdTsKfQ==