关闭

求最大公约数

425人阅读 评论(0) 收藏 举报
分类:

                                                         求最大公约数

                     很多时候我们都需要使用这个进行解决问题, 所以认为写一个和最大公约数有关的东西是必要的!

                    思想:

                             采用辗转相除法:

                            关于辗转相除法, 搜了一下, 在我国古代的《九章算术》中就有记载,现摘录如下: 


约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。” 


其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法,实际上就是辗转相除法。 


辗转相除法求最大公约数,是一种比较好的方法,比较快。 

          其实很简单 ,就是一个数对另一个数求余,然后把余数作为除数, 原除数作为被除数, 直至 余数为0  那么除数就是 最大公约数 ( 要判断除数为 0 ) 的情况就是!

          不多说了 ,直接上代码:

 源代码:

#include<cstdio>
#include<iostream>
using namespace std;

int oulid(int a, int b)
{
    int t;
    if(b == 0)
    {
        return a;
    }
    t = a%b;
    while(t  != 0)
    {
        a = b;
        b = t;
        t = a%b;
    }
    return b;
}
int main()
{
    int a, b, c;
    cout<<"Input two integers"<<endl;
    while(cin>>a>>b)
    {
         c = oulid(a, b);
         cout<<c<<endl;
    }
    return 0;

}


下面给出求最大公约数的递归和飞抵会代码,并且给出 注释:

#include<iostream>
using namespace std;

int oulid(int a, int b)
{
    //求最大公约数
    if(b == 0)
    {
        return a;
    }
    int res = a%b ;  //表示余数 6 4  余数 2  er 4 7 res 4
    while(res)
    {
        a = b;     // a= 4   2   er  7 4 3
        b = res;   //b = 2   2  er 4   3 1 就是最大公约数
        res = a%b; //res = 2  0  er 3  1 0
    }
    return b;
}
int gcd(int a, int b)
{
    if(b == 0) return a;
    return gcd(b , a%b);
}
int main()
{
    int a, b;
    while(cin>>a>>b)
    {
        int ans1 = oulid(a, b);
        int ans2 = gcd(a, b);
        cout<<ans1<<" "<<ans2<<endl;
    }
    return 0;
}



0
0
查看评论

【C/C++】求最大公约数的三种方法

一、最大公约数与最小公倍数 最大公约数,属于数论所探究的内容。 最大公约数可以通过下面的三种方法求出来。 最小公倍数呢,它与最大公约数的乘机为所求数之积。   比如求  x,y的最大公约数和最小公倍数 记住这个公式: x*y=最小公倍数*最大公约数 二、求最大公约数的三种方法 ①...
  • qq_31828515
  • qq_31828515
  • 2016-07-02 20:48
  • 29156

用函数求最大公约数

(1)输入两个数,并求出其最大公约数 #include using namespace std; int gcd(int x,int y) { int max,min; int n; if(x>y) max=x,min=y; else max=y,min=x; do { ...
  • fu_yunjian
  • fu_yunjian
  • 2016-08-05 10:51
  • 1714

c语言实现求最大公约数的三种方法

一、最大公约数     最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。 二、求最大公约数的三种方法 ①辗转相除法 算法...
  • Landscape_
  • Landscape_
  • 2017-03-22 22:24
  • 12652

C++项目参考解答-求最大公约数

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。 【项目2-求最大公约数】(1)输入两个数,并求出其最大公约数#include using n...
  • sxhelijian
  • sxhelijian
  • 2014-11-07 11:12
  • 3578

求最大公约数(利用递归)

/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作者:李蒙 ...
  • zylmtz2012
  • zylmtz2012
  • 2012-11-25 11:26
  • 6918

java算法——求最大公约数和最小公倍数

//求最大公约数和最小公倍数 /*求最大公约数方法:辗转相除法 始终用较大数除以较小数,然后用余数代替较大数 整除时的除数就是最大公约数 举例:222 407求最大公约数 222 407(407除以222余数185) 222 185(222除以185余数37) 222 37 (222除以37余数...
  • tingzhiyi
  • tingzhiyi
  • 2016-07-28 20:26
  • 6100

求最大公约数的高效率算法

声明:下文中的算法与数学原理,都是从《编程之美》的2.7节中的解法三看到后,摘抄和修改而来的。 数学原理公式: 若x,y均为偶数,f(x,y) = 2 * f(x/2,y/2); 若只x均为偶数,f(x,y) = f(x/2,y); 若只y均为偶数,f(x,y) = ...
  • u014653197
  • u014653197
  • 2016-09-19 21:03
  • 1871

求最大公约数的快速算法

 /**//* stein 算法求最大公约数,和欧基里德算法相比,效果更好: 主要思想如下: 化归思想    1.m为奇数时:    (1)n也为奇数:gcd(m,n)&...
  • oopos
  • oopos
  • 2007-10-08 21:21
  • 3029

三种方法求最大公约数(C语言版)

问题描述:用三种方法求两个的整数的最大公约数。 算法分析: 1.相减法:输入两整数a和b,(1)如果a>b,a=a-b;(2)如果a  (4)如果a!=b,则再执行(1)或(2) 程序实现如下图: 2.穷举法:输入两个整数a和b,(1)定义c;(2)如果a>b,则c=b;(...
  • Aimee_mf
  • Aimee_mf
  • 2017-03-21 23:20
  • 1375

递归算法-求最大公约数-java实现

/** * 递归算法:求最大公约数,根据欧几里德知道-》m和n(m > n)的最大公约数 = n 和m%n的最大公约数 * * @author timmy1 * */public class GreatestCommonDivisor { public int getGCD(int m, i...
  • Timmy_zzh
  • Timmy_zzh
  • 2016-11-24 12:57
  • 2680
    个人资料
    • 访问:271086次
    • 积分:5909
    • 等级:
    • 排名:第5169名
    • 原创:341篇
    • 转载:13篇
    • 译文:0篇
    • 评论:28条
    感谢打赏 支付宝二维码
    支付宝
    微信公众号 欢迎关注
    微信
    发福利啦 支付宝扫码有红包
    支付宝
    最新评论