#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
using ll = long long;
using ld = long double;
#define all(x) x.begin(),x.end()
#define v(x) vector<x>
#define nl '\n'
#define fxd(x) fixed << setprecision(x)
template<class t> using ordered_set = tree<t, null_type, less<t>, rb_tree_tag, tree_order_statistics_node_update>;
template<class t> using ordered_multiset = tree<t, null_type, less_equal<t>, rb_tree_tag, tree_order_statistics_node_update>;
vector<bool> nums(1000005,true);
ll sz = nums.size()-1;
void sieve()
{
nums[0] = false;
nums[1] = false;
for (ll i = 2; i < nums.size(); i++)
{
if(nums[i])
{
for (ll j = i*i; j < sz; j+=i)
{
nums[j] = false;
}
}
}
return;
}
bool feared(ll n)
{
while(n)
{
if(n%10 == 0)
{
return false;
}
n/=10;
}
return true;
}
bool alltruncates(ll n)
{
ll p = log10(n);
while (p--)
{
if(!nums[n%(ll)pow(10,p+1)]) return false;
}
return true;
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
sieve();
int t; cin >> t;
v(ll) pref(sz,0);
for (int i = 1; i < sz; i++)
{
if(nums[i] && feared(i) && alltruncates(i)) pref[i]++;
pref[i] = pref[i-1] + pref[i];
}
while (t--)
{
ll n; cin >> n;
cout << pref[n] << nl;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKdXNpbmcgbGwgPSBsb25nIGxvbmc7CnVzaW5nIGxkID0gbG9uZyBkb3VibGU7CgojZGVmaW5lIGFsbCh4KSAgeC5iZWdpbigpLHguZW5kKCkKI2RlZmluZSB2KHgpIHZlY3Rvcjx4PgojZGVmaW5lIG5sICdcbicKI2RlZmluZSBmeGQoeCkgZml4ZWQgPDwgc2V0cHJlY2lzaW9uKHgpCnRlbXBsYXRlPGNsYXNzIHQ+IHVzaW5nIG9yZGVyZWRfc2V0ID0gdHJlZTx0LCBudWxsX3R5cGUsIGxlc3M8dD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+Owp0ZW1wbGF0ZTxjbGFzcyB0PiB1c2luZyBvcmRlcmVkX211bHRpc2V0ID0gdHJlZTx0LCBudWxsX3R5cGUsIGxlc3NfZXF1YWw8dD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+OwoKdmVjdG9yPGJvb2w+IG51bXMoMTAwMDAwNSx0cnVlKTsKbGwgc3ogPSBudW1zLnNpemUoKS0xOwp2b2lkIHNpZXZlKCkKewogICAgbnVtc1swXSA9IGZhbHNlOwogICAgbnVtc1sxXSA9IGZhbHNlOwogICAgZm9yIChsbCBpID0gMjsgaSA8IG51bXMuc2l6ZSgpOyBpKyspCiAgICB7CiAgICAgICAgaWYobnVtc1tpXSkKICAgICAgICB7CiAgICAgICAgICAgIGZvciAobGwgaiA9IGkqaTsgaiA8IHN6OyBqKz1pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBudW1zW2pdID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9Cgpib29sIGZlYXJlZChsbCBuKQp7CiAgICB3aGlsZShuKQogICAgewogICAgICAgIGlmKG4lMTAgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgbi89MTA7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBhbGx0cnVuY2F0ZXMobGwgbikKewogICAgbGwgcCA9IGxvZzEwKG4pOwogICAgd2hpbGUgKHAtLSkKICAgIHsKICAgICAgICBpZighbnVtc1tuJShsbClwb3coMTAscCsxKV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKG51bGxwdHIpOyBjb3V0LnRpZShudWxscHRyKTsKICAgIHNpZXZlKCk7CiAgICBpbnQgdDsgY2luID4+IHQ7CiAgICB2KGxsKSBwcmVmKHN6LDApOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzejsgaSsrKQogICAgewogICAgICAgIGlmKG51bXNbaV0gJiYgZmVhcmVkKGkpICYmIGFsbHRydW5jYXRlcyhpKSkgcHJlZltpXSsrOwogICAgICAgIHByZWZbaV0gPSBwcmVmW2ktMV0gKyBwcmVmW2ldOwogICAgfQogICAgd2hpbGUgKHQtLSkKICAgIHsKICAgICAgICBsbCBuOyBjaW4gPj4gbjsKICAgICAgICBjb3V0IDw8IHByZWZbbl0gPDwgbmw7CiAgICB9Cn0=