#include <bits/stdc++.h>
using namespace std;
long long emerlads(long long sticks, long long diamond) {
  if (sticks <= 0 || diamond <= 0 || (sticks == 1 && diamond == 1))
    return 0;
  else
    return max(1 + emerlads(sticks - 1, diamond - 2),
               1 + emerlads(sticks - 2, diamond - 1));
}
int binaryToDecimal(int n) {
  int num = n;
  int dec_value = 0;
  int base = 1;
  int temp = num;
  while (temp) {
    int last_digit = temp % 10;
    temp = temp / 10;
    dec_value += last_digit * base;
    base = base * 2;
  }
  return dec_value;
}
bool comp(pair<char, int> lhs, pair<char, int> rhs) {
  if (lhs.first == rhs.first) return lhs.second < rhs.second;
  return lhs.first > rhs.first;
}
long long fastpow(long long a, long long b) {
  if (!b) return 1;
  long long sq = fastpow(a, b / 2);
  sq *= sq;
  if (b % 2 != 0) sq *= a;
  return sq;
}
int mkItInt(string str) {
  int val = 0, len = str.size();
  for (int i = 0; i < len; i++) {
    val = val * 10 + str[i] - 48;
  }
  return val;
}
bool check_ageOralco(string str) {
  if (str[0] >= 48 && str[0] <= 57)
    return true;
  else
    return false;
}
bool palindrome(string str) {
  string sss;
  int i, j;
  j = str.size() - 1;
  for (i = 0; i < str.size() / 2; i++, j--) {
    if (str[i] != str[j]) return false;
  }
  return true;
}
int dp[100];
int fib(int n) {
  if (n == 0) return 0;
  if (n == 1) return 1;
  if (dp[n] != -1) return dp[n];
  return dp[n] = fib(n - 1) + fib(n - 2);
}
int calc_fib(int n) {
  memset(dp, -1, sizeof(dp));
  return fib(n);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t;
  cin >> t;
  while (t--) {
    int n;
    cin >> n;
    int arr[n];
    for (int i = 0; i < n; i++) cin >> arr[i];
    sort(arr, arr + n);
    vector<int> v;
    int ans = 0;
    for (int i = 0; i < n; i++) {
      v.push_back(arr[i]);
      if (v.size() == arr[i]) {
        ans++;
        v.clear();
      }
    }
    cout << ans << "\n";
  }
  return 0;
}
