Acwing869. 试除法求约数
题目叙述:
给定 n
对正整数 ai,bi,请你求出每对数的最大公约数。
输入格式:
第一行包含整数 n
接下来 n行,每行包含一个整数对 ai,bi。
输出格式:
输出共 n行,每行输出一个整数对的最大公约数。
数据范围
1≤n≤105,1≤ai,bi≤2×109
输入样例:
2
3 6
4 6
输出样例:
3
2
思路:
直接试除法求约数即可:
从1-sqrt(n),枚举n的约数,并判断这个约数对应的另一个约数与它是不是重复的,不是重复的,就放入数组中,最后对数组进行排序,就完成了这道题。
AC代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n; cin >> n;
while (n--) {
int x; cin >> x;
vector<int> res;
for (int i = 1; i <= x / i; i++) {
if (x% i == 0) {
res.push_back(i);
if (i != x / i) res.push_back(x / i);
}
}
sort(res.begin(), res.end());
for (auto it : res) cout << it << " ";
cout << endl;
}
return 0;
}