题目链接: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;
}