放牧代码和思想
专注自然语言处理、机器学习算法

AOJ 0005 GCD and LCM 题解 《挑战程序设计竞赛》

AOJ 0005 GCD and LCM

最大公约数和最小公倍数:……

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 题解 《挑战程序设计竞赛》

分享到:更多 ()

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机