算法-欧几里得算法(C++实现)

来源:互联网 发布:小数据研究所 编辑:程序博客网 时间:2024/05/16 00:40

欧几里得算法求得的是两个整数的最大公因式。而这是一个快速算法。

两次迭代之后余数最多是原值的一般,所以迭代次数最多是2logN = O(logN)级别的。

证明我就不放在这里了。然后2logN次数是最差情况,这个情况是在两个数为相邻的斐波那契数的时候。

代码如下:


////  main.cpp//  Euclid////  Created by Alps on 14-7-24.//  Copyright (c) 2014年 chen. All rights reserved.//#include <iostream>using namespace std;int Eud(int M, int N){    int tmp;    while (N > 0) {        tmp = M % N;        M = N;        N = tmp;    }    return M;}int main(int argc, const char * argv[]){    int M, N;    scanf("%d %d",&M, &N);    if (M < N) {        M += N;        N = M - N;        M = M - N;    }    int Rem = Eud(M, N);    printf("Rem is %d\n",Rem);    return 0;}

这里说下,在Main函数里,有个if 那个是当M 比 N小的时候,交换M 和 N,这个方法是不引入第三个数的方法来交换的,其实我知道的还有两种办法,(位于和位或的办法)。可以看下~

其他的都很简单了~

0 0