【题目】
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;
}