两非负整数求最大公约数(欧几里德算法)---C/C++

#include<iostream>
using namespace std;

//欧几里德算法求两个非负整数的最大公约数
int getDivisor(int a,int b)
{
    int max,min;
    max = a;
    min = b;
    //两数中大数模小数,若结果不为0,则舍弃大数 ,把小数和模运算的结果分出大小来,继续取模运算
    //依次递归求解,直到模运算结果为0,则此时的小数就是最大公约数
    if(max%min!=0){
        if(max%min>min)
            return getDivisor(max%min,min);
        else
            return getDivisor(min,max%min);
    }else
        return min;
}

int main()
{
    //freopen("D:\\algorithm\\testdata.txt","r",stdin);
    int a,b,max,min;
    int result;
    cout<<"请输入两个非负整数 :" ;
    cin >> a >> b;
    a>b?(max = a,min = b):(max = b,min = a);
    result = getDivisor(a,b);
    cout<< a << "与" << b << "的最大公约数为 " << result<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/daemon94011/p/9021952.html

时间: 2025-01-13 06:00:08

两非负整数求最大公约数(欧几里德算法)---C/C++的相关文章

[转]求最大公约数的算法

更相减损术 更相减损术,又称"等值算法" 关于约分问题,实质是如何求分子,分母最大公约数的问题.<九章算术>中介绍了这个方法,叫做”更相减损术”,数学家刘徽对此法进行了明确的注解和说明,是一个实用的数学方法. 例:今有九十一分之四十九,问约之得几何? 我们用(91,49)表示91和49的最大公约数.按刘徽所说,分别列出分子,分母. “以少减多,更相减损,求其等也,以等数约之,等数约之,即除也,其所以相减者皆等数之重叠,故以等数约之.” 译文如下: 约分的法则是:若分子.分母

求最大公约数的算法以及最小公倍数

短除法: #include<stdio.h> #include<stdlib.h> int max_approximate(int num1, int num2) { if (num1 > num2) { int tmp = 0; tmp = num1; num1 = num2; num2 = tmp; } int min = num1; while (min) { if ((num2%min == 0)&&(num1%min==0)) { return mi

关于C/C++中求最大公约数的算法

1.更相减损法 int gcd(int a,int b) { while(a!=b) { if(a>b) a-=b; else b-=a; } return a; } 2.辗转相除法--递归 int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } 3.辗转相除法--纯循环 int gcd(int a,int b) { int r; while(b!=0) { r=a%b; a=b; b=r; } return a;

欧几里得求最大公约数

问题:快速求取正整数a,b的最大公约数? 欧几里得算法(又称辗转相除法) 定理:gcd(a,b) = gcd(a,a mod b) 证明:对于任何正整数a,b.如果a>b,都有a=k*b+r  即r=a-k*b =>  r=a mod b. 假设d为a,b的公约数,则a=a1*d,b=b1*d. 而r=a1*d-k*b1*d=(a1-k*b1)*d  =>  d也是r的约数 => d也是(a,r)的公约数 则说明(a,b)的公约数也就是(a,r)的公约数.因此gcd(a,b)=gc

求最大公约数和最小公倍数

学习C++入门级的题目,求最大公约数和最小公倍数,这里介绍两种求最大公约数的方法,即辗转相除法和辗转相减法.辗转相除法的原理自行百度,辗转相减法的原理就是只要两数不想等就用大数减小数,直至相等,求最小公倍数的方法就是用两数的乘积除以最大公约数. #include<iostream> using namespace std; int maxf(int a,int b)//辗转相减法 { while(a != b) { if(a > b) return a = a - b; else ret

欧几里德算法(求两个正整数的最大公约数)

/*欧几里德算法:辗转求余  原理: gcd(a,b)=gcd(b,a mod b)  当b为0时,两数的最大公约数即为a getchar()会接受前一个scanf的回车符*/ #include<stdio.h> void main(){    int temp;    int a,b;    scanf("%d",&a);    scanf("%d",&b);    printf("the greatest common fa

用python实现欧几里德算法求最大公约数

方法1: def gcd(x, y):   while n:       x, y = y, x % y   return x 方法2: def yue(x,y):      if y:              return gcd(y,x%y)      else:            return x 用python实现欧几里德算法求最大公约数,布布扣,bubuko.com

C语言求最大公约数(两种最简单的算法实现)

第一种:用较小数的最大约数于较大数作求模元算 #include<stdio.h> /*     求两个数的最大公约数 */ int main(){     int a,b,max,min,i,result;     scanf("%d,%d",&a,&b);     printf("您输入的的值分别为%d,%d\n",a,b);          if(a>b){         max=a;         min=b;    

【算法】欧几里德算法--求最大公约数

预备知识 因子(除数) 如果有整数 n,a,b .a和b都不为0 ,且 有 n = a*b ,则说a(或者b,以下省略说明)为n的一个因子,或者说a能整除n. 特别的:任何非0整数都是0的因子,所以一般我们不会去求0的因子. 如:3 的因子有  1, -1 ,  3 ,  -3 .然而我们一般只考虑正数因子,因为负数因子和正数因此没有本质上的区别,只是符号不同而已. 素数:素数(也加叫质数)的定义是,如果整数p的因子 只有 ±1 和   ±p,则它就是素数 .特别的:0 和1既不是素数,也不是合