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

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

两次迭代之后余数最多是原值的一般,所以迭代次数最多是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,这个方法是不引入第三个数的方法来交换的,其实我知道的还有两种办法,(位于和位或的办法)。可以看下~

其他的都很简单了~

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值