牛牛的约数
题号:NC300747
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}给定一个长度为 n 的正整数序列 a_1, a_2, \dots, a_n,对于每个 1\le i\le n,求解下标 j \left(1\leq j\leq n\right),满足 a_j<a_ia_j \nmid a_i
\hspace{15pt}如果存在多个符合条件的 j,输出任意一个即可。若无解,则输出 -1 替代该位置的答案。

【名词解释】
\hspace{15pt}\nmid:不整除。a\nmid b 表示 a 不是 b 的约数,即 b 不能被 a 整除。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 100\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行输入一个整数 n \left(1\leq n\leq 10^5\right),表示序列长度。
\hspace{15pt}第二行输入 n 个整数 a_1, a_2, \dots, a_n\left(1\leq a_i\leq 10^{18}\right),表示序列中的元素。
\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 2\times 10^5

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行输出 n 个整数,表示答案。特别地,如果某个位置无解,则输出 -1 替代该位置的答案。
示例1

输入

复制
3
5
1 2 3 4 5
4
2 4 8 16
6
1 2 4 7 8 16

输出

复制
-1 -1 2 3 4
-1 -1 -1 -1
-1 -1 -1 3 4 4