#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define fast ios_base::sync_with_stdio(0), cin.tie(NULL), cout.tie(NULL)
#define endl "\n"
#define ii pair<ll,ll>
#define ic pair<char,ll>
#define pb push_back
#define vi vector<ll>
#define popb pop_back
#define all(v) (v).begin(), (v).end()
#define F first
#define S second
//#define size(x) (int)(x.size())
ll M =1073741824;
ll i,j;
ll fac(ll x);
ll inv_fac(ll x);
ll binexp(ll a,ll b);

ll fac(ll x)
{
    ll fcto=1;
    for(ll i=2;i<=x;i++)
    {
        fcto*=i;
        fcto%=M;
    }
    return fcto;
}
ll inv_fac(ll x)
{
    return binexp(fac(x),M-2);
}
ll binexp(ll a,ll b)
{
    if(a==0||a==1) return a;
    if(b==0)  return 1;
    ll ret= binexp(a,b/2);
    if(b%2) return (((ret*ret)%M)*a)%M;
    else return (ret*ret)%M;
}

bool sortbysecdesc(const pair<int,int> &a,
                   const pair<int,int> &b)
{
       return a.second>b.second;
}
ll isPrime(ll n)
{   if (n <= 3)  return (1);
    if (n%2 == 0 || n%3 == 0) return (0);
    for ( i=5; i*i<=n; i=i+6)
        if (n%i == 0 || n%(i+2) == 0)
           return (0);

    return (1);
}
ll smallestDivisor(ll n)
{
    // if divisible by 2
    if (n % 2 == 0)
        return 2;

    // iterate from 3 to sqrt(n)
    for ( i = 3; i * i <= n; i += 2) {
        if (n % i == 0)
            return i;
    }

    return n;
}
long long maxPrimeFactors(long long n)
{
    long long maxPrime = -1;
    while (n % 2 == 0) {
        maxPrime = 2;
        n >>= 1;
    }
    for ( i = 3; i <= sqrt(n); i += 2) {
        while (n % i == 0) {
            maxPrime = i;
            n = n / i;
        }
    }
    if (n > 2)
        maxPrime = n;
    return maxPrime;
}
ll countDivisors(ll n)
{
    ll cnt = 0;
    for ( i = 1; i <= sqrt(n); i++) {
        if (n % i == 0) {
            if (n / i == i)
                cnt++;

            else
                cnt = cnt + 2;
        }
    }
    return cnt;
}
int main()
{
    fast;
    ll t=1;
    cin>>t;
    while(t--)
    {
      ll n;
      cin>>n;
      ll u[n],anu;
      map<ll,ll>mp;
      for(i=0;i<n;i++)
      {
          cin>>u[i];
          mp[u[i]]++;
      }
      vector<ii>v;
      for(i=0;i<n;i++)
      {
          cin>>anu;
          v.pb({u[i],anu});
      }
      sort(v.begin(),v.end());
      reverse(v.begin(),v.end());
      //for(i=0;i<n;i++){cout<<v[i].F<<" "<<v[i].S<<" ";}cout<<"\n";
      ll dp[n+1],count=1;
      for(i=0;i<n+1;i++){dp[i]=0;}
      for(i=0;i<n;i++)
      {
          count=1;
          if(i==n-1){dp[count]+=v[i].S;}
          else if(v[i].F!=v[i+1].F){dp[count]+=v[i].S;}
          else
          {
              ll kk =mp[v[i].F];
              vector<ll>vv(kk+1);
              vv[0]=0;
              while(i!=n-1&&v[i].F==v[i+1].F)
              {
                  vv[count]=vv[count-1]+v[i].S;i++;count++;
                  if(i==n-1){break;}
              }
              vv[count]=vv[count-1]+v[i].S;
              for(j=1;j<=count;j++)
              {
                  ll num=(kk/j);
                  num*=j;
                  dp[j]+=vv[num];
              }
          }
      }

      for(i=1;i<=n;i++)
      {
          cout<<dp[i]<<" ";
      }
      cout<<"\n";
    }


}
