#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned ll
#define ld long double
typedef vector<int> vi;
typedef multiset<int> mi;
typedef multiset<ll> mll;
typedef vector<ll> vll;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef set<ll> sll;
typedef vector<vector<int>> _2vi;
typedef vector<vector<ll>> _2vll;
#define all(v) ((v).begin()), ((v).end())
#define sz(v) ((ll)((v).size()))
#define vinp(v, n) \
for (ull i = 0; i < (n); i++) \
cin >> (v)[i]
#define printv(v) \
for (auto i : (v)) \
cout << i << " "
#define fr0(i, n) for (ull(i) = 0; (i) < (n); (i)++)
#define fr1(i, n) for (ull(i) = 1; (i) < (n); (i)++)
#define fr(i, x, n) for (ull(i) = (x); (i) < (n); (i)++)
#define _CRT_SECURE_NO_WARNING
const ll MOD = 1000000007;
void Bustany() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
#ifndef ONLINE_JUDGE
freopen("./in.txt", "r", stdin), freopen("./out.txt", "w", stdout);
#endif
}
const ll N = 1e5 + 5;
vector<sll> adj(N);
//_2vll adj(N,vll(N));
//vb vis;
string a, b;
ll dp[19][163][163][2][2];
int vis[19][163][163][2][2];
int g = 0;
/*
? Find all prime numbers from 1 to n
? Complexity : O[n * log(log(n))]
*/
vector<bool> isPrime(205, 1);
vector<int> primes;
vector<int> sieve(int n) {
isPrime[0] = isPrime[1] = 0;
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i)
isPrime[j] = false;
}
}
for (int i = 2; i < 163; i++) {
if (isPrime[i]) primes.push_back(i);
}
return primes;
}
int s = 0;
ll rec(int ind, int mod, int sum, bool greater, bool smaller) {
if (ind == b.size()) {
return mod == 0 && sum == s;
}
auto &res = dp[ind][mod][sum][greater][smaller];
if (vis[ind][mod][sum][greater][smaller] == g)return res;
vis[ind][mod][sum][greater][smaller] = g;
res = 0;
ll en = 9, st = 0;
if (!greater)st = a[ind] - '0';
if (!smaller)en = b[ind] - '0';
for (ll i = st; i <= en; i++) {
if (sum + i <= s)
res += rec(ind + 1, (mod * 10 + i) % s, sum + i, greater || i > st, smaller || i < en);
}
return res;
}
void solve() {
cin >> a >> b;
while (a.size() < b.size()) {
a = '0' + a;
}
ll sum = 0;
for (int i = 0; i < primes.size(); i++) {
g++;
s = primes[i];
sum += rec(0, 0, 0, 0, 0);
}
cout << sum << '\n';
}
int main() {
Bustany();
sieve(200);
ll t = 1;
cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSB1bGwgdW5zaWduZWQgbGwKI2RlZmluZSBsZCBsb25nIGRvdWJsZQp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIG11bHRpc2V0PGludD4gbWk7CnR5cGVkZWYgbXVsdGlzZXQ8bGw+IG1sbDsKdHlwZWRlZiB2ZWN0b3I8bGw+IHZsbDsKdHlwZWRlZiB2ZWN0b3I8Ym9vbD4gdmI7CnR5cGVkZWYgdmVjdG9yPHN0cmluZz4gdnM7CnR5cGVkZWYgc2V0PGxsPiBzbGw7CnR5cGVkZWYgdmVjdG9yPHZlY3RvcjxpbnQ+PiBfMnZpOwp0eXBlZGVmIHZlY3Rvcjx2ZWN0b3I8bGw+PiBfMnZsbDsKI2RlZmluZSBhbGwodikgKCh2KS5iZWdpbigpKSwgKCh2KS5lbmQoKSkKI2RlZmluZSBzeih2KSAoKGxsKSgodikuc2l6ZSgpKSkKCiNkZWZpbmUgdmlucCh2LCBuKSAgICAgICAgICAgICAgICBcCiAgICBmb3IgKHVsbCBpID0gMDsgaSA8IChuKTsgaSsrKSBcCiAgICBjaW4gPj4gKHYpW2ldCiNkZWZpbmUgcHJpbnR2KHYpICAgICAgXAogICAgZm9yIChhdXRvIGkgOiAodikpIFwKICAgIGNvdXQgPDwgaSA8PCAiICIKI2RlZmluZSBmcjAoaSwgbikgZm9yICh1bGwoaSkgPSAwOyAoaSkgPCAobik7IChpKSsrKQojZGVmaW5lIGZyMShpLCBuKSBmb3IgKHVsbChpKSA9IDE7IChpKSA8IChuKTsgKGkpKyspCiNkZWZpbmUgZnIoaSwgeCwgbikgZm9yICh1bGwoaSkgPSAoeCk7IChpKSA8IChuKTsgKGkpKyspCiNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklORwpjb25zdCBsbCBNT0QgPSAxMDAwMDAwMDA3OwoKdm9pZCBCdXN0YW55KCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgY291dC50aWUoTlVMTCk7CiNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCIuL2luLnR4dCIsICJyIiwgc3RkaW4pLCBmcmVvcGVuKCIuL291dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgp9Cgpjb25zdCBsbCBOID0gMWU1ICsgNTsKdmVjdG9yPHNsbD4gYWRqKE4pOwovL18ydmxsIGFkaihOLHZsbChOKSk7Ci8vdmIgdmlzOwpzdHJpbmcgYSwgYjsKCmxsIGRwWzE5XVsxNjNdWzE2M11bMl1bMl07CmludCB2aXNbMTldWzE2M11bMTYzXVsyXVsyXTsKCmludCBnID0gMDsKCi8qCiA/IEZpbmQgYWxsIHByaW1lIG51bWJlcnMgZnJvbSAxIHRvIG4KID8gQ29tcGxleGl0eSA6IE9bbiAqIGxvZyhsb2cobikpXQogKi8KdmVjdG9yPGJvb2w+IGlzUHJpbWUoMjA1LCAxKTsKCnZlY3RvcjxpbnQ+IHByaW1lczsKCnZlY3RvcjxpbnQ+IHNpZXZlKGludCBuKSB7CiAgICBpc1ByaW1lWzBdID0gaXNQcmltZVsxXSA9IDA7CgogICAgZm9yIChpbnQgaSA9IDI7IGkgKiBpIDw9IG47IGkrKykgewogICAgICAgIGlmIChpc1ByaW1lW2ldKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSBpICogaTsgaiA8PSBuOyBqICs9IGkpCiAgICAgICAgICAgICAgICBpc1ByaW1lW2pdID0gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDI7IGkgPCAxNjM7IGkrKykgewogICAgICAgIGlmIChpc1ByaW1lW2ldKSBwcmltZXMucHVzaF9iYWNrKGkpOwogICAgfQogICAgcmV0dXJuIHByaW1lczsKfQoKaW50IHMgPSAwOwoKbGwgcmVjKGludCBpbmQsIGludCBtb2QsIGludCBzdW0sIGJvb2wgZ3JlYXRlciwgYm9vbCBzbWFsbGVyKSB7CiAgICBpZiAoaW5kID09IGIuc2l6ZSgpKSB7CiAgICAgICAgcmV0dXJuIG1vZCA9PSAwICYmIHN1bSA9PSBzOwogICAgfQogICAgYXV0byAmcmVzID0gZHBbaW5kXVttb2RdW3N1bV1bZ3JlYXRlcl1bc21hbGxlcl07CiAgICBpZiAodmlzW2luZF1bbW9kXVtzdW1dW2dyZWF0ZXJdW3NtYWxsZXJdID09IGcpcmV0dXJuIHJlczsKICAgIHZpc1tpbmRdW21vZF1bc3VtXVtncmVhdGVyXVtzbWFsbGVyXSA9IGc7CiAgICByZXMgPSAwOwogICAgbGwgZW4gPSA5LCBzdCA9IDA7CiAgICBpZiAoIWdyZWF0ZXIpc3QgPSBhW2luZF0gLSAnMCc7CiAgICBpZiAoIXNtYWxsZXIpZW4gPSBiW2luZF0gLSAnMCc7CiAgICBmb3IgKGxsIGkgPSBzdDsgaSA8PSBlbjsgaSsrKSB7CiAgICAgICAgaWYgKHN1bSArIGkgPD0gcykKICAgICAgICAgICAgcmVzICs9IHJlYyhpbmQgKyAxLCAobW9kICogMTAgKyBpKSAlIHMsIHN1bSArIGksIGdyZWF0ZXIgfHwgaSA+IHN0LCBzbWFsbGVyIHx8IGkgPCBlbik7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CgoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBhID4+IGI7CiAgICB3aGlsZSAoYS5zaXplKCkgPCBiLnNpemUoKSkgewogICAgICAgIGEgPSAnMCcgKyBhOwogICAgfQogICAgbGwgc3VtID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJpbWVzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgZysrOwogICAgICAgIHMgPSBwcmltZXNbaV07CiAgICAgICAgc3VtICs9IHJlYygwLCAwLCAwLCAwLCAwKTsKICAgIH0KICAgIGNvdXQgPDwgc3VtIDw8ICdcbic7Cn0KCmludCBtYWluKCkgewogICAgQnVzdGFueSgpOwogICAgc2lldmUoMjAwKTsKICAgIGxsIHQgPSAxOwogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==