题目描述
给定 n 个正整数 ai,对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数。
输入格式
第一行包含整数 n。
接下来 n 行,每行包含一个整数 ai。
输出格式
输出共 n 行,其中第 i 行输出第 i 个整数 ai 的所有约数。
数据范围
1≤n≤100,
2≤ai≤2×10^9空间太大就用集合来存
样例
输入样例:
2
6
8
输出样例:
1 2 3 6
1 2 4 8
如果 a / b = c···0,则一定有 a % c = b····0。所以一个数 x 的约数肯定是成对存在的,对称轴是 根号x。
因此,只需要用 x 除以 1 到 根号x 之间的数,如果余数是0,则把(除数)以及(x / 除数)加到答案中。
import java.util.*;
class Main{
static int n = 0;
static void isYueShu(int n){
ArrayList<Integer> lis = new ArrayList<>();
for(int i = 1; i <= n / i; ++i){
if(n % i == 0){
lis.add(i);
if(n / i != i)lis.add(n / i);
}
}
Collections.sort(lis, (a, b)->a - b);
for(int c : lis){
System.out.print(c + " ");
}
System.out.println();
}
public static void main(String[] args)throws Exception{
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
while(n -- != 0){
int a = sc.nextInt();
isYueShu(a);
}
}
}