假期看了Richard Courant在六十多年前写下的不朽著作《What Is Mathematics》,感觉经典就是经典,大师的作品果然博大精深,而且深入浅出,正如书的简介中所言“ 本书既是为初学者也是为专家,既是为学生也是为教师,既是为哲学家也是为工程师而写的”。下面这个例子是对其中讲到的欧几里得辗转相除法的一个简单应用(原创奥)。
算法效率:此算法的效率比通常的算法的效率平均快几十到几百倍,我相信在我发布之前网上没有比这个算法更好的求最大公因子的算法!^_^
算法:
//main.cpp文件
#include using namespace std;int count = 0; //global number, 用于记录计算次数
int searchCommonFactor(int aX, int aY) //aY = m * aX + n, d = (aX, aY) = (aX, n) (其中d为最大公因子)
{
int temp = 0;
while (aX != 0)
{ temp = aY % aX; aY = aX; aX = temp; count++; }
return aY; //输出最大公因子
}
int main()
{
int num[2]; int commonFactor = 1; cout << "Please input two numbers:" << endl; cin >> num[0] >> num[1]; commonFactor = searchCommonFactor(num[0], num[1]); cout << "The Common Factor is " << commonFactor << endl; cout << "The calculating times is " << count << endl;
return 0;
}
算法的理论基础:此算法的理论基础为:欧几里得辗转相除法。存在如下定理:如果a是任意整数而b是任意大于零的整数,则我们总能找到一整数q,使 a = b•q + r,这里r是满足不等式0<=r