用欧几里得辗转相除法求任意两个整数的最大公因子(网上最快的算法!!!)

      假期看了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值