【洛谷】P1029 最大公约数和最小公倍数问题(数学、枚举、暴力)

【题目】

https://www.luogu.org/problem/P1029

标签:数学、枚举、暴力

【思路】

1)最大公约数和最小公倍数有这样的关系:
最小公倍数=两整数的乘积/最大公约数

2)另外还要用到求模法:
求模法就是对于传入的两个数,用较大的数来对较小的数求模,要是模为零,则较大的数则为最大公约数。若是模不为零,则对于较小的数和模继续上述的过程。

主要思路就是从x到y遍历,并判断要满足上面的两个条件才行。

【代码】

#include <iostream>
using namespace std;

int modNum(int m, int n) {
	return !n ? m : modNum(n, m%n);
}

int main() {
	int x, y, result = 0;
	cin >> x >> y;
	for (int i = x; i <= y; i += x) {
		// 第一个条件满足两数相乘等于最大公约数x和最小公倍数y的乘积
		// 第二个条件满足两数的最大公约数是x
		if (x*y%i == 0 && modNum(x*y / i, i) == x) {
			result++;
		}
	}
	cout << result << endl;
	return 0;
}
发布了100 篇原创文章 · 获赞 34 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42780289/article/details/102295429