#include<bits/stdc++.h>
using namespace std;
struct p{
	long long a,b;
}q[200005];
long long s[200005],ans[200005];
int cmp(struct p a,struct p b){
	return a.a<b.a?1:0;
}
int bo(struct p a,struct p b){
	return a.b>b.b?1:0;
}
int main() {
	long long t,i,j,n,x,y,w;
	scanf("%lld",&t);
	while(t--){
		scanf("%lld",&n);
		long long k=-1;
		for(i=0;i<n;i++){
		scanf("%lld",&q[i].a);	
		k=max(k,q[i].a);
		}
		for(i=0;i<n;i++)
		scanf("%lld",&q[i].b);

		sort(q,q+n,cmp);
		long long to=0;
		for(i=0;i<n;i++){
		s[q[i].a]++;
		to+=q[i].b;	
		}
		long long be=0;
		for(i=1;i<=k;i++){
			sort(q+be,q+s[i]+be,bo);
			be+=s[i];
		}

		be=0;
		for(i=1;i<=k;i++){
			for(w=be+1;w<be+s[i];w++)
			q[w].b+=q[w-1].b;
			be+=s[i];
		}
		be=0;
		for(i=1;i<=k;i++){
			for(j=1;j<=s[i];j++){
				long long te=s[i]%j;
				ans[j]+=q[be+s[i]-te-1].b;
			}
			be+=s[i];
		}
		for(i=1;i<=n;i++)
		printf("%lld ",ans[i]);
		for(i=1;i<=k;i++)
		s[i]=0;
		for(i=1;i<=n;i++)
		ans[i]=0;
		printf("\n");
	}
}
