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

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

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

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

代码如下:


//
//  main.cpp
//  Euclid
//
//  Created by Alps on 14-7-24.
//  Copyright (c) 2014年 chen. All rights reserved.
//

#include 

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,这个方法是不引入第三个数的方法来交换的,其实我知道的还有两种办法,(位于和位或的办法)。可以看下~

其他的都很简单了~

你可能感兴趣的:(算法基础)