#include <bits/stdc++.h>
#include <stdio.h>
#include <cmath>
#include <iostream>
using namespace std;
typedef long long ll;
#define bye return
#define yes cout << "YES" << el;
#define no cout << "NO" << el;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define Shoyo \
ios_base::sync_with_stdio(0); \
cin.tie(NULL);
#define ff first
#define ss second
#define pii pair<ll, ll>
#define all(v) v.begin(), v.end()
#define allr(v) v.rbegin(), v.rend()
#define cl(x, y) (x + y - 1) / y
#define el "\n"
#define os tree<pii, null_type, less<>, \
rb_tree_tag, tree_order_statistics_node_update>
ll dx[4] = {-1, 0, 1, 0};
ll dy[4] = {0, 1, 0, -1};
const ll LOG = 20;
const int N = 1e6 + 5;
const ll MOD = 1e9 + 7;
bool is_prime[200]; // عشان نجيب البرايمز
vector<int> primes;
void sieve(int mx) {
fill(is_prime + 2, is_prime + mx + 1, true);
for (int i = 2; i * i <= mx; i++) {
if (is_prime[i]) {
for (int j = i * i; j <= mx; j += i)
is_prime[j] = false;
}
}
for (int i = 2; i <= mx; i++) {
if (is_prime[i]) primes.push_back(i);
}
}
string l,r;
ll vid;
ll v[20][2][2][165][165];
ll mem[20][2][2][165][165];
ll p;
ll dp(ll i,ll le,ll ri,ll sum,ll rem) {
if (i==r.size()) {
return (sum==p and rem==0 );
}
if (sum>p)return 0;
ll &res=mem[i][le][ri][sum][rem];
if (v[i][le][ri][sum][rem]==vid) return res;
v[i][le][ri][sum][rem]=vid;
ll st=le?0:l[i];
ll e=ri?9:r[i];
res=0;
for (ll d=st;d<=e;d++) {
res+=dp(i+1,le or( d>l[i]), ri or (d<r[i]),sum+d,(rem*10+d)%p);
}
return res;
}
void solve() {
cin>>l>>r;
l=string(r.size()-l.size(),'0')+l;
ll ans=0;
for (auto &x:l)x-='0';
for (auto &x:r)x-='0';
sort(all(primes));
for (auto z:primes) {
p=z;
if (p>167)break;
vid++;
ans+=dp(0,0,0,0,0);
}
cout<<ans<<el;
}
int main(){
Shoyo;
ll t = 1;
cin>>t;
sieve(200);
while (t--)
{
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CiNkZWZpbmUgYnllIHJldHVybgojZGVmaW5lIHllcyBjb3V0IDw8ICJZRVMiIDw8IGVsOwojZGVmaW5lIG5vIGNvdXQgPDwgIk5PIiA8PCBlbDsKI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CiNkZWZpbmUgU2hveW8gICAgICAgICAgICAgICAgICAgICBcCmlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IFwKY2luLnRpZShOVUxMKTsKI2RlZmluZSBmZiBmaXJzdAojZGVmaW5lIHNzIHNlY29uZAojZGVmaW5lIHBpaSBwYWlyPGxsLCBsbD4KI2RlZmluZSBhbGwodikgdi5iZWdpbigpLCB2LmVuZCgpCiNkZWZpbmUgYWxscih2KSB2LnJiZWdpbigpLCB2LnJlbmQoKQojZGVmaW5lIGNsKHgsIHkpICh4ICsgeSAtIDEpIC8geQojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBvcyB0cmVlPHBpaSwgbnVsbF90eXBlLCBsZXNzPD4sIFwKcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4KbGwgZHhbNF0gPSB7LTEsIDAsIDEsIDB9OwpsbCBkeVs0XSA9IHswLCAxLCAwLCAtMX07CmNvbnN0IGxsIExPRyA9IDIwOwpjb25zdCBpbnQgTiA9IDFlNiArIDU7CmNvbnN0IGxsIE1PRCA9IDFlOSArIDc7CmJvb2wgaXNfcHJpbWVbMjAwXTsgICAvLyDYudi02KfZhiDZhtis2YrYqCDYp9mE2KjYsdin2YrZhdiyCnZlY3RvcjxpbnQ+IHByaW1lczsKdm9pZCBzaWV2ZShpbnQgbXgpIHsKICAgIGZpbGwoaXNfcHJpbWUgKyAyLCBpc19wcmltZSArIG14ICsgMSwgdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMjsgaSAqIGkgPD0gbXg7IGkrKykgewogICAgICAgIGlmIChpc19wcmltZVtpXSkgewogICAgICAgICAgICBmb3IgKGludCBqID0gaSAqIGk7IGogPD0gbXg7IGogKz0gaSkKICAgICAgICAgICAgICAgIGlzX3ByaW1lW2pdID0gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gbXg7IGkrKykgewogICAgICAgIGlmIChpc19wcmltZVtpXSkgcHJpbWVzLnB1c2hfYmFjayhpKTsKICAgIH0KfQpzdHJpbmcgbCxyOwpsbCB2aWQ7CmxsIHZbMjBdWzJdWzJdWzE2NV1bMTY1XTsKbGwgbWVtWzIwXVsyXVsyXVsxNjVdWzE2NV07CmxsIHA7CmxsIGRwKGxsIGksbGwgbGUsbGwgcmksbGwgc3VtLGxsIHJlbSkgewogICBpZiAoaT09ci5zaXplKCkpIHsKICAgICAgIHJldHVybiAoc3VtPT1wIGFuZCByZW09PTAgKTsKICAgfQogICAgaWYgKHN1bT5wKXJldHVybiAwOwogICAgbGwgJnJlcz1tZW1baV1bbGVdW3JpXVtzdW1dW3JlbV07CiAgICBpZiAodltpXVtsZV1bcmldW3N1bV1bcmVtXT09dmlkKSByZXR1cm4gcmVzOwogICAgdltpXVtsZV1bcmldW3N1bV1bcmVtXT12aWQ7CiAgICBsbCBzdD1sZT8wOmxbaV07CiAgICBsbCBlPXJpPzk6cltpXTsKICAgIHJlcz0wOwogICAgZm9yIChsbCBkPXN0O2Q8PWU7ZCsrKSB7CiAgICAgICAgcmVzKz1kcChpKzEsbGUgb3IoIGQ+bFtpXSksIHJpIG9yIChkPHJbaV0pLHN1bStkLChyZW0qMTArZCklcCk7CiAgICB9CnJldHVybiByZXM7Cgp9CnZvaWQgc29sdmUoKSB7CiAgICBjaW4+Pmw+PnI7CiAgICBsPXN0cmluZyhyLnNpemUoKS1sLnNpemUoKSwnMCcpK2w7CiAgICBsbCBhbnM9MDsKICAgIGZvciAoYXV0byAmeDpsKXgtPScwJzsKICAgIGZvciAoYXV0byAmeDpyKXgtPScwJzsKICAgIHNvcnQoYWxsKHByaW1lcykpOwogICBmb3IgKGF1dG8gejpwcmltZXMpIHsKICAgICAgIHA9ejsKICAgICAgIGlmIChwPjE2NylicmVhazsKICAgICAgIHZpZCsrOwogICAgICAgYW5zKz1kcCgwLDAsMCwwLDApOwogICB9CmNvdXQ8PGFuczw8ZWw7Cgp9CmludCBtYWluKCl7CiAgICBTaG95bzsKICAgIGxsIHQgPSAxOwogY2luPj50OwogICAgc2lldmUoMjAwKTsKICAgIHdoaWxlICh0LS0pCiAgICB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiAwOwp9