洛谷 P1029 最大公约数和最小公倍数问题


程序说明

a * b = gcd * lcm。
注意循环只遍历了前一部分(即第一个数小于√(gcd * lcm))如3,60,没有遍历后半部分如60,3。因此最后的结果需要乘以2。

代码如下:

#include 
using namespace std;
int gcd(int a, int b) {
    return b ? gcd(b, a % b) : a;
}
int cnt;
int main() {
    int m, n;
    cin>>m>>n;
    for(int i = 1; i * i <= m * n; i++) {
        if(gcd(i, (n * m / i)) == m && (n * m) % i == 0)
            cnt++;  
    }
    cout<

你可能感兴趣的:(洛谷 P1029 最大公约数和最小公倍数问题)