栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数学】欧几里得算法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数学】欧几里得算法

一、最大公因数:

上过小学的都知道,最大公因数是什么,指整数中数列中所有数字的最大公有因数。

二、求解:

1.暴力枚举:

QWQ,这应该是最简单的办法了,从枚举到2,如果有符合题意的,直接break输出。没有就输出1,时间复杂度

代码:

python

a = []
...
a.sort()
mina = a[0]
b = false
for i in range(a[0], 2, -1):
    for j in a:
        if j % i != 0:
            b = true
            break
    if not b:
        print(i)
        break
    b = false
print(1)

C++

#include 
#include 
using namespace std;
int main() {
    int a[MAXSIZE];    
    ...
    bool b = false;
    int max = a[0];
    for (int i = max; i >= 2; i--) {
        for (int j = 0; j < MAXSIZE; j++) {
            if (a[j] % i != 0) {
                b = true;
                break;  
            }
        }    
        if (!b) {
            cout << i;
            break;
        }
    }
    cout << 1;
}

2.欧几里得算法(辗转相除法)

欧几里得算法的意思是:

这样时间复杂度就为

代码:

python

def gcd(a, b):
    if b == 0: 
        return a
    return gcd(b, a % b)

C++

int gcd(int a, int b) {
    if (b == 0) return a;
    return gcd(b, a % b);
}

C++的algorithm库中,有__gcd(int a, int b)函数,可以直接使用,例如:

#include 
#include 
using namespace std;
int main() {
    int a, b;
    ...
    cout << __gcd(a, b);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/989908.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号