#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
#include <complex>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(),(v).end()
typedef complex<double> base;
using ll = long long;
void fft(vector <base>& a, bool invert)
{
int n = sz(a);
for (int i = 1, j = 0; i < n; i++) {
int bit = n >> 1;
for (; j >= bit; bit >>= 1) j -= bit;
j += bit;
if (i < j) swap(a[i], a[j]);
}
for (int len = 2; len <= n; len <<= 1) {
double ang = 2 * M_PI / len * (invert ? -1 : 1);
base wlen(cos(ang), sin(ang));
for (int i = 0; i < n; i += len) {
base w(1);
for (int j = 0; j < len / 2; j++) {
base u = a[i + j], v = a[i + j + len / 2] * w;
a[i + j] = u + v;
a[i + j + len / 2] = u - v;
w *= wlen;
}
}
}
if (invert) {
for (int i = 0; i < n; i++) a[i] /= n;
}
}
void multiply(const vector<ll>& a, const vector<ll >& b, vector<ll>& res)
{
vector <base> fa(all(a)), fb(all(b));
int n = 1;
while (n < max(sz(a), sz(b))) n <<= 1;
n <<= 1;
fa.resize(n); fb.resize(n);
fft(fa, false); fft(fb, false);
for (int i = 0; i < n; i++) fa[i] *= fb[i];
fft(fa, true);
res.resize(n);
for (int i = 0; i < n; i++) res[i] = int(fa[i].real() + (fa[i].real() > 0 ? 0.5 : -0.5));
}
const ll n_ = 1001010;
ll p[n_], a, b, c, x, y, n;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
vector<ll>A(n_), B(n_), C;
for (int i = 2; i < n_; i++)
if (p[i])continue;
else {
A[i] = 1;
B[i] = 1;
for (int j = i + i; j < n_; j += i)p[j] = 1;
}
cin >> n;
multiply(A, B, C);
for (int i = 0; i < n; i++) {
cin >> a;
b = C[a];
if (!p[a / 2])b++;
b /= 2;
cout << b << '\n';
}
}
I2RlZmluZSBfVVNFX01BVEhfREVGSU5FUwojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGNvbXBsZXg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxzdHJpbmc+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBzeih2KSAoKGludCkodikuc2l6ZSgpKQojZGVmaW5lIGFsbCh2KSAodikuYmVnaW4oKSwodikuZW5kKCkKdHlwZWRlZiBjb21wbGV4PGRvdWJsZT4gYmFzZTsKdXNpbmcgbGwgPSBsb25nIGxvbmc7Cgp2b2lkIGZmdCh2ZWN0b3IgPGJhc2U+JiBhLCBib29sIGludmVydCkKewoJaW50IG4gPSBzeihhKTsKCWZvciAoaW50IGkgPSAxLCBqID0gMDsgaSA8IG47IGkrKykgewoJCWludCBiaXQgPSBuID4+IDE7CgkJZm9yICg7IGogPj0gYml0OyBiaXQgPj49IDEpIGogLT0gYml0OwoJCWogKz0gYml0OwoJCWlmIChpIDwgaikgc3dhcChhW2ldLCBhW2pdKTsKCX0KCWZvciAoaW50IGxlbiA9IDI7IGxlbiA8PSBuOyBsZW4gPDw9IDEpIHsKCQlkb3VibGUgYW5nID0gMiAqIE1fUEkgLyBsZW4gKiAoaW52ZXJ0ID8gLTEgOiAxKTsKCQliYXNlIHdsZW4oY29zKGFuZyksIHNpbihhbmcpKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKz0gbGVuKSB7CgkJCWJhc2UgdygxKTsKCQkJZm9yIChpbnQgaiA9IDA7IGogPCBsZW4gLyAyOyBqKyspIHsKCQkJCWJhc2UgdSA9IGFbaSArIGpdLCB2ID0gYVtpICsgaiArIGxlbiAvIDJdICogdzsKCQkJCWFbaSArIGpdID0gdSArIHY7CgkJCQlhW2kgKyBqICsgbGVuIC8gMl0gPSB1IC0gdjsKCQkJCXcgKj0gd2xlbjsKCQkJfQoJCX0KCX0KCWlmIChpbnZlcnQpIHsKCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgYVtpXSAvPSBuOwoJfQp9Cgp2b2lkIG11bHRpcGx5KGNvbnN0IHZlY3RvcjxsbD4mIGEsIGNvbnN0IHZlY3RvcjxsbCA+JiBiLCB2ZWN0b3I8bGw+JiByZXMpCnsKCXZlY3RvciA8YmFzZT4gZmEoYWxsKGEpKSwgZmIoYWxsKGIpKTsKCWludCBuID0gMTsKCXdoaWxlIChuIDwgbWF4KHN6KGEpLCBzeihiKSkpIG4gPDw9IDE7CgluIDw8PSAxOwoJZmEucmVzaXplKG4pOyBmYi5yZXNpemUobik7CglmZnQoZmEsIGZhbHNlKTsgZmZ0KGZiLCBmYWxzZSk7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgZmFbaV0gKj0gZmJbaV07CglmZnQoZmEsIHRydWUpOwoJcmVzLnJlc2l6ZShuKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSByZXNbaV0gPSBpbnQoZmFbaV0ucmVhbCgpICsgKGZhW2ldLnJlYWwoKSA+IDAgPyAwLjUgOiAtMC41KSk7Cn0KCmNvbnN0IGxsIG5fID0gMTAwMTAxMDsKbGwgcFtuX10sIGEsIGIsIGMsIHgsIHksIG47CmludCBtYWluKCkgewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKCWNpbi50aWUoMCksIGNvdXQudGllKDApOwoJdmVjdG9yPGxsPkEobl8pLCBCKG5fKSwgQzsKCWZvciAoaW50IGkgPSAyOyBpIDwgbl87IGkrKykKCQlpZiAocFtpXSljb250aW51ZTsKCQllbHNlIHsKCQkJQVtpXSA9IDE7CgkJCUJbaV0gPSAxOwoJCQlmb3IgKGludCBqID0gaSArIGk7IGogPCBuXzsgaiArPSBpKXBbal0gPSAxOwoJCX0KCWNpbiA+PiBuOwoJbXVsdGlwbHkoQSwgQiwgQyk7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCWNpbiA+PiBhOwoJCWIgPSBDW2FdOwoJCWlmICghcFthIC8gMl0pYisrOwoJCWIgLz0gMjsKCQljb3V0IDw8IGIgPDwgJ1xuJzsKCX0KfQoK