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;
}
posted @ 2024-07-24 09:44  Tomorrowland_D  阅读(1)  评论(0编辑  收藏  举报