最大公约数和最小公倍数:……
2.6 数学问题的解题窍门
辗转相除法求最大公约数gcd,然后lcm = a * b / gcd 。
题外话,今天看了某个C++开源库,觉得完全优化的C\C++代码很难理解和维护,大量使用位运算和void * 指针,当然还涉及到IDE对注释的糟糕解析、调试器对UTF-8字串的错误显示(字符串中的字符无效,需要加s8参数)等等问题。最后觉得如果是原型或教学代码,还是用Python或Java的好,投入生产环境再-> C++ -> C -> 内联汇编不迟。
#include <iostream> using namespace std; long long gcd(long long a, long long b) { if (b == 0)return a; return gcd(b, a%b); } long long lcm(long long a, long long b) { return a * b / gcd(a, b); } ///////////////////////////SubMain////////////////////////////////// int main(int argc, char *argv[]) { long long a, b; while (cin >> a >> b) { cout << gcd(a, b) << " " << lcm(a, b) << endl; } return 0; } ///////////////////////////End Sub//////////////////////////////////
知识共享署名-非商业性使用-相同方式共享:码农场 » AOJ 0005 GCD and LCM 题解 《挑战程序设计竞赛》