N个数的最大公约数

#include <iostream>
using namespace std;
int main()
{
    int c;
    int m[4]={45,60,100,120};
    for(int i=1;i<4;i++)
    {
        if(m[i-1]<m[i])/*确定a>b*/
        {
            m[i-1]=m[i-1]+m[i];
            m[i]=m[i-1]-m[i];
            m[i-1]=m[i-1]-m[i];
        }
        for(c=m[i];c>=1;c--)
        {
            if(m[i-1]%c==0 && m[i]%c==0)/*最大公约数*/
            break;
        }
        m[i]=c;
    }
    cout<<c;
    return 0;
}
时间: 2024-08-05 15:00:20

N个数的最大公约数的相关文章

写一个方法,求两个数的最大公约数和最小公倍数。

package homework0702; /* * 最大公约数 利用辗转相除法求解两个正整数的最大公约数 在循环中,只要除数不等于0,用较大的数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环较小的数,如此循环直到较小的数值为0,返回较大的数.即为最大公约数. 辗转相除法(欧几里得算法) 定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数.最大公约数(greatest common divisor)缩写为gcd. 最小公倍数 最小公倍数 = (a

求两个数的最大公约数

求两个数的最大公约数 问题:给定两个正整数a和b,求他们的最大公约数. 最简单的方法就是穷举法,如果a>b,那么依次计算1~b的所有整数是否是a和b的公约数. public static void main(String[] args) { long timer = System.currentTimeMillis(); System.out.println(getGCB(1000234234,1242342390)); System.out.println(System.currentTime

多个数的最大公约数

---恢复内容开始--- 最近在看一本算法的书.讲的都是一些基本的问题,并没有涉及很复杂的算法,或者说这本书更看重技巧. 其中开篇就讲了最大公约数的算法,觉得有可取之处,和大家分享一下. 提到最大公约数我们最先想到的一定是辗转相除法. 没错,永远不要蔑视我们的祖先,他们的智慧是无穷的.(扯远了,嘿嘿) 我们都在用辗转相除法来求最大公约数,却很少去想为什么辗转相除法就能求最大公约数呢?或者说怎么证明算法的正确性呢(至少我之前完全没有想过). 这里我们感性的认识一下辗转相除法(不是很严格地证明一下)

求两个数的最大公约数和最小公倍数

import java.util.Scanner; //求两个数的最大公约数,最小共倍数. public class CommonMaxDivisor { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); int m=scanner.nextInt(); int n=scanner.nextInt(); scanner.close(); CommonMaxDivisor cmd=new

求两个数的最大公约数和最小公倍数 C语言

C程序设计第八章的第一道题目,求两个数的最大公约数和最小公倍数.需要注意一下几点: 1.最大公约数和最小公倍数间的关系: 设两个数是a,b最大公约数是p,最小公倍数是q 那么有这样的关系:ab=pq 所以q=ab/p.2.任意整数和0的公约数是该整数的所有约数,所以它们的最大公约数为该整数本身.3.碾转相除法:被除数%除数=余数,如果余数不为0,就让原来的除数做为被除数,余数作为除数,再进行运算 被除数%除数=余数,直到得到的余数为0为止,此时的除数就是最大公约数. #include <stdi

【C语言】求两个数的最大公约数

思路: 辗转相除法:以小的数除大数,所得的是整数,那这个数就是最大公约数,不然就用余数来除刚才的除数,直到得到整数,这时作为除数的就是最大公约数. #include<stdio.h> int main() { int m,n,t,p; printf("请输入两个数:"); scanf("%d %d",&m,&n); if((m >= n) && (m % n==0)) { t=n; } if((p = m%n) &a

求N个数的最大公约数和最小公倍数

除了分解质因数,还有另一种适用于求几个较小数的最大公约数.最小公倍数的方法 下面是数学证明及算法实现 令[a1,a2,..,an] 表示a1,a2,..,an的最小公倍数,(a1,a2,..,an)表示a1,a2,..,an的最大公约数,其中a1,a2,..,an为非负整数.对于两个数a,b,有[a,b]=ab/(a,b),因此两个数最小公倍数可以用其最大公约数计算.但对于多个数,并没有[a1,a2,..,an]=M/(a1,a2,..,an)成立,M为a1,a2,..,an的乘积.例如:[2,

[000]求两个数的最大公约数

求出两个数的最大公约数 1 int foo(int v1, int v2) 2 { 3 while(v2) { 4 int temp = v2; 5 v2 = v1 % v2; 6 v1 = temp; 7 } 8 9 return v1; 10 } [000]求两个数的最大公约数,布布扣,bubuko.com

一天一个算法:求俩个数的最大公约数和最小公倍数

求俩个数的最大公约数和最小公倍数 解答: 当较大数除以较小数余数等于0时,较小数为最大公约数. 两数相乘结果除以它们的最大公约数为最小公倍数. int cdivisor(int x1,int y1) { int r,temp; if (x1<y1) { temp =x1; x1 = y1; y1 = temp; } while(x1%y1)//当较大数除以较小数余数等于0时,较小数为最大公约数 { r=x1%y1; x1=y1; y1=r; } return y1; } int cmultipl

C语言辗转相除法求2个数的最小公约数

辗转相除法最大的用途就是用来求两个数的最大公约数. 用(a,b)来表示a和b的最大公约数. 有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c). (证明过程请参考其它资料) 例:求 15750 与27216的最大公约数. 解: ∵27216=15750×1+11466 ∴(15750,27216)=(15750,11466) ∵15750=11466×1+4284 ∴(15750,11466)=(11466,4284) ∵11466=4284×2+2898 ∴(11466