#include <bits/stdc++.h>
using namespace std;
// CJX__//
typedef long long ll; // 不开long long 见祖宗
typedef unsigned long long ull;
typedef __int128 i128;
typedef pair<int, int> PII;
typedef pair<ll, ll> PLL;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<double> vd;
typedef vector<PII> vPII;
#define IOS                  \
    ios::sync_with_stdio(0); \
    cin.tie(0);              \
    cout.tie(0);
#define out(x) cout << ((x) ? "YES" : "NO") << endl
#define mod(x, P) (((x) % (P) + (P)) % (P))
#define endl '\n'
#define gcd __gcd
#define lc p << 1
#define rc p << 1 | 1
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define lowbit(x) ((x) & (-x))
#define rep(i, x, n) for (ll i = x; i <= n; i++)
#define dep(i, x, n) for (ll i = x; i >= n; i--)
#define mem(a, x) memset(a, x, sizeof a)
const double eps = 1e-5;
const int N = 1e6 + 10, M = 1e7 + 10, K = 26;
const ll MOD = 1e9 + 7, Md3 = 998244353, Md7 = 1e9 + 7, Md9 = 1e9 + 9;
const int dx[8] = {-1, 0, 1, 0, -1, -1, 1, 1}, dy[8] = {0, 1, 0, -1, -1, 1, -1, 1};
const int ddx[8] = {1, 1, 2, 2, -1, -1, -2, -2}, ddy[8] = {2, -2, 1, -1, 2, -2, 1, -1};
template <typename T>
bool cmin(T &a, const T &b) { return b < a ? a = b, 1 : 0; }
template <typename T>
bool cmax(T &a, const T &b) { return b > a ? a = b, 1 : 0; }
template <typename T>
void sort_range(vector<T> &v, int l, int r) { sort(v.begin() + l, v.begin() + r + 1); }
struct Random
{
    mt19937_64 rng;
    Random() : rng(chrono::steady_clock::now().time_since_epoch().count()) {}
    ull rand_ull(ull max_val = -1) { return rng() % (max_val + 1); }
    ll rand_ll(ll l, ll r) { return uniform_int_distribution<ll>(l, r)(rng); }
    int rand_int(int l, int r) { return uniform_int_distribution<int>(l, r)(rng); }
    double rand_db(double l, double r) { return uniform_real_distribution<double>(l, r)(rng); }
    bool rand_bool(double p = 0.5) { return bernoulli_distribution(p)(rng); }
    template <typename T>
    void shuffle(vector<T> &v) { std::shuffle(v.begin(), v.end(), rng); }
};
ll qmi(ll a, ll b, ll p)
{
    ll res = 1 % p;
    a %= p;
    while (b)
    {
        if (b & 1)
            res = res * a % p;
        a = a * a % p;
        b >>= 1;
    }
    return res;
}
/*      题目 要求 ai>=2  然后问满足任意(i,j)使得数组中gcd(a[i],a[j])==1
    但是你可以删去 数组中的元素 问最少删除多长 使得满足上面条件
    获得硬币 ai-1  支付硬币 ai+1
    3
  5 5 5   -> 4 5 5 -> 3 5 5 -> 3 4 5  out 0

  4
  2 3 2 4   -> 凑不出 ->  2 3  out 2

  3
  2 100 2 -> 2 3 97  out 0

   5
2 4 2 11 2   ->2 3 4 10 ->2 3 5 7 out 1
*/

ll prime[N], cnt = 0;
bool st[M];
ll sum[N];
void init()
{
    for (ll i = 2; i < M; i++)
    {
        if (!st[i])
            prime[cnt++] = i;
        for (ll j = 0; prime[j] * i < M && j < cnt; j++)
        {
            st[prime[j] * i] = true;
            if (i % prime[j] == 0)
                break;
        }
    }
    rep(i, 0, cnt - 1)
    {
        sum[i + 1] = sum[i] + prime[i];
    }
}

void solve()
{
    ll n;
    cin >> n;
    vll a(n + 1, 0);
    ll summ = 0, num = 0;
    rep(i, 1, n) cin >> a[i], summ += a[i];
    sort_range(a, 1, n);
    rep(k, 0, n)
    {
        if (summ - num >= sum[n - k])
        {
            cout << k << endl;
            return;
        }
        if (k < n)
            num += a[k + 1];
    }
}

int main()
{
    IOS;
    int _ = 1;
    cin >> _; // 如果是多组数据
    init();
    while (_--)
    {
        solve();
    }
    return 0;
}