两数最大公约数 (递归算法)

//求取两数最大公约数(gcd):gcd(m,n)=gcd(n,m%n)
//递归方法实现,如下:
#include "stdafx.h"
#include <iostream>
using namespace std;
int gcd(int a, int b) //递归函数
{
    int r;
    r = a%b;
    if (r == 0)
        return b;
    else
        return gcd(b, r);
}
int main()
{
    int a, b;
    cout << "请输入两个数:" << endl;
    cin >> a;
    cin >> b;
    cout << a << "和" << b << "的最大公约数是:" << gcd(a, b) << endl;

    getchar();
    return 0;
}
时间: 2024-10-24 07:58:48

两数最大公约数 (递归算法)的相关文章

求取两数最大公约数 (非递归算法)

#include "stdafx.h" #include <iostream> using namespace std; int main() { int a, b, c, i; cout << "请输入两个数:"; cin >> a; cin >> b; for (i = a; i>1; i--) { if (a%i == 0 && b%i == 0) { cout << a <

辗转相除法,计算两数最大公约数,最小公倍数,

原文地址:https://www.cnblogs.com/binye/p/10226019.html

两数的最大公约数、最小公倍数

几个整数,公有的约数,叫做这几个数的公约数:其中最大的一个,叫做这几个数的最大公约数.例如:12.16的公约数有±1.±2.±4,其中最大的一个是4,4是12与16的最大公约数,一般记为(12,16) = 4.12.15.18的最大公约数是3,记为(12,15,18) = 3.    几个自然数公有的倍数,叫做这几个数的公倍数,其中最小的一个自然数,叫做这几个数的最小公倍数.例如:4的倍数有±4.±8.±12.±16,--,6的倍数有±6.±12.±18.±24,--,4和6的公倍数有±12.±

如何求两数的最大公约数

一: 更相减损 //熟知的辗转相除法变形 main() { int a,b; scanf("%d %d",&a,&b); while(a!=b) { if(a>b) a-=b; else b-=a; } printf("%d",a); } 二: 辗转相除 //一般用递归描述算法 gcd(m,n)与gcd(n,m mod n)相同 为什么? gcd(m,0)=m 为什么? 两数不需比较大小也行 为什么 ? main() { int a,b,r,t

算法怎么就这么难?----使用欧几里得算法求两数的最大公约数

本人菜鸟一枚,上午在看书的时候突然看到了求最大公约数的一个例题,突然就想到以前好像看过一个欧几里得算法,故又上网仔细找了一下欧几里得算法的原理.可能是本人时间长没看算法,脑子都生锈了. 看了几个讲解欧几里得算法的文章,大都只给公式,然后说了一大堆因为....在我还没看懂的时候,突然来了个所以...然后公式就这样推出来的.⊙﹏⊙b汗! 经过我这令人捉急的小脑袋转了半天,最后有了点眉目,所以拿出来和大家分享一下! 1.首先说一下:欧几里得算法是求两个数的最大公约数的,你可能会问:什么是最大公约数?

关于两数的最大公约数gcd

深根半夜里研究C++的语法,在弄到关于函数的定义 这一部分时突然想写个试试,就拿比较熟悉的gcd来好了. 活这么久gcd一直是用辗转相除法(或者说欧几里得算法)得出的,根据<算法导论>第三版的中文页码P547给出的伪代码,很容易就得出C++的写法. int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a % B); } However---- 当a,b比较大的时候显得特别慢,所以出现了来自<九章算术>中的更相减损术来

12--c完数/最大公约数/最小公倍数/素数/回文数

完数/最大公约数/最小公倍数/素数/回文数 2015-04-08 10:33 296人阅读 评论(0) 收藏 举报  分类: C/C++(60)  哈尔滨工业大学(8)  版权声明:本文为博主原创文章,未经博主允许不得转载. 1.一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). [cpp] view plain copy #include <stdio.h> #include <math.h

求两数最小公倍数

输入代码: /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:sum123.cpp * 作 者:林海云 * 完成日期:2015年1月10日 * 版 本 号:v2.0 * * 问题描述:求两数的最小公倍数 * 输入描述:两个整数 * 程序输出:最小公倍数 */ #include<iostream> using namespace std; int gcd(int x,int y); int gad(int x,int

小学奥数 最大公约数与最小公倍数

依然要用到均值不等式的知识,证明在这里:http://www.cnblogs.com/xtx1999/p/4913067.html 因为知道了两个数的最大公约数和最小公倍数,于是就知道了两个数的乘积.根据均值不等式,两个数和一定两数和一定,它们两个越接近乘积越大.所以乘积一定时,它们越接近和就越小所以枚举即可. #include<iostream> #include<cstdio> using namespace std; int gcd,lcm,a,b,tot,ans=10000