题目链接:https://www.acwing.com/problem/content/description/871/
时/空限制:1s / 64MB
题目描述
给定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
解题思路
题意:从小到大的顺序输出n的所有约数。
思路:直接从1开始一个一个的试,判断i是否为n的因子,如果是那就把i和n/i保存下来,注意n为完全平方数的时候i==n/i。
Accepted Code:
/*
* @Author: lzyws739307453
* @Language: C++
*/
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 5;
int pre[MAXN];
int get_divisors(int n) {
int cnt = 0;
for (int i = 1; i <= n / i; i++) {
if (!(n % i)) {
pre[cnt++] = i;
if (i != n / i)
pre[cnt++] = n / i;
}
}
sort(pre, pre + cnt);
return cnt;
}
int main() {
int t, n;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
int cnt = get_divisors(n);
for (int i = 0; i < cnt; i++)
printf("%d ", pre[i]);
printf("\n");
}
return 0;
}