精华内容
下载资源
问答
  • 怎样求最小公约数
    千次阅读
    2021-05-18 09:44:15

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

    假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数。

    最小公倍数的公式是 a*b/m

    m为最大公约数

    因为 a=m*i; b=m*j;

    最小公倍数为 m*i*j

    计算a和b的最大公约数的方法:

    方法一:

    更相损减法:

    反复把两数的最大者减去最小者,直至两数相等,这个数就是最大公约数

    如 4 和 6

    6-4=2

    2个数变成了4和2

    4-2=2

    两个数变成了2和2

    2=2 即2是两数的最大公约数

    方法二:

    辗转相除法:

    大致原理类似于 更相损减法

    a>b

    a%b的余数为r

    c语言求最大公约数和最小公倍数(转)

    最大公约数与最小公倍数的求解是很多初学C的人所面临的一道问题.当然这道问题并不难解答,也有很多人已经写过相关的博客,我在此书写此篇博客,一是为了让自己能够夯实基础,另外就是希望能够帮到和我一样的初学者 ...

    JAVA 基础编程练习题6 【程序 6 求最大公约数及最小公倍数】

    6 [程序 6 求最大公约数及最小公倍数] 题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数. 程序分析:利用辗除法. package cskaoyan; public class csk ...

    c语言:辗转相除法求最大公约数、最小公倍数

    辗转相除法,又称欧几里得算法.两个正整数a和b(a>b),它们的最大公约数等于余数c和较小的数b之间的最大公约数.最小公倍数=两数之积/最大公约数 #include

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

    最大公约数(Greatest Common Divisor(GCD)) 基本概念 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的 ...

    辗转相除法求最大公约数和最小公倍数【gcd】

    要求最小公倍数可先求出最大公约数 设要求两个数a,b的最大公约数 伪代码: int yushu,a,b: while(b不等于0) { yushu=a对b求余 b的值赋给a yushu的值赋给b } ...

    Java50道经典习题-程序6 求最大公约数及最小公倍数

    题目:输入两个正整数m和n,求其最大公约数和最小公倍数.分析:用辗转相除法求最大公约数    两个数的最大公约数:设两个数分别为n和m,(n>=m);用定义一个变量i,使用for循环,将i的取值 ...

    Problem06 求最大公约数及最小公倍数

    题目:输入两个正整数m和n,求其最大公约数(m,n)和最小公倍数[m,n]. 程序分析:利用辗转相除法. 利用辗除法:用较大数除以较小数,再用出现的余数(第一余数)去除除数, 再用出现的余数(第二余数 ...

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

    """写两个函数,分别求两个整数的最大公约数和最小公倍数,调用这两个函数,并输出结果.两个整数由键盘输入.""" ''' 设两个整数u和v, ...

    C语言 · 求最大公约数

    算法提高 求最大公约数   时间限制:1.0s   内存限制:512.0MB      编写一函数gcd,求两个正整数的最大公约数. 样例输入: 5 15样例输出:5 样例输入: 7 2样例输出:1 ...

    随机推荐

    手机版web相关meta配置

    若页面需默认用ie兼容内核,增加标签: 若页面需默认用ie标准内核,增加标签: --> 页面标题

    [ZigBee] 2、 ZigBee开发环境搭建

    本节介绍ZigBee基本开发环境搭建,附件中有本节介绍的软件下载地址~ 链接:http://pan.baidu.com/s/1bLdqxg 1.IAR Embedded Workbench 的安装 S ...

    ABBYY PDF Transformer+从文件选项中创建PDF文档的教程

    可使用OCR文字识别软件ABBYY PDF Transformer+从Microsoft Word.Microsoft Excel.Microsoft PowerPoint.HTML.RTF.Micr ...

    通过mysql写入一句话木马

    USE mysql;# MySQL 返回的查询结果为空(即零行). # MySQL 返回的查询结果为空(即零行). CREATE TABLE a( cmd1 text NOT NULL );# MyS ...

    java Quartz定时器任务与Spring task定时的几种实现,

    java Quartz定时器任务与Spring task定时的几种实现 基于java 的定时任务实现, Quartz 时间详细配置    请查阅   http://www.cnblogs.com/si ...

    HDU2216:Game III(BFS)

    Game III Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Subm ...

    redis 系列10 字符串对象

    一. 字符串对象编码 Redis中字符串可以存储3种类型,分别是字节串(byte string).整数.浮点数.在上章节中讲到字符串对象的编码可以是int, raw,embstr. 如果一个字符串对象 ...

    php创建临时表

    $sql= "create temporary table yc_linshi ( img varchar(100) not null, openid varchar(50) not nul ...

    IntelliJ IDEA 2017版 Spring5 的RunnableFactoryBean配置

    1.新建RunnableFactoryBean package com.spring4.pojo; import org.springframework.beans.factory.FactoryBe ...

    更多相关内容
  • python怎么求最大公约数最小公倍数 一、求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5,那么10...
  • 基于FPGA开发板的两位数求最大公约数最小公倍数的设计,该设计中利用辗转相减法求得公约数与公倍数,且两个数的数值可通过按键修改,设计灵活可靠。该设计基于vivado开发,并带有testbench文件,方便仿真学习。
  • 主要介绍了Python基于递归算法求最小公倍数和最大公约数,结合实例形式分析了Python使用递归算法进行数值计算的相关操作技巧,需要的朋友可以参考下
  • 今天整理了一下用递归法求最大公约数(gcd)和最小公倍数(lcm)。主要的工作是求最大公约数。数学上可以用辗转法求最大公约数
  • C++ 实现求最大公约数最小公倍数 最大公约数 辗转相除法: int maxDivisor(int a, int b) { int c = b; while (a%b != 0) { c = a%b; a = b; b = c; } return c; } 辗转相减法: int maxDivisor(int a,...
  • 本文实例讲述了Python自定义函数实现两个数最大公约数最小公倍数。分享给大家供大家参考,具体如下: 1. 求最小公倍数的算法: 最小公倍数 = 两个整数的乘积 / 最大公约数 所以我们首先要求出两个整数的最大公...
  • c代码-萌新作业(输入两个数求最大公约数 最小公倍数)
  • 欧几里德算法求最大公约数.cpp.rar,欧几里德算法求最大公约数.cpp
  • 短除法求最大公约数.cpp.rar,短除法求最大公约数.cpp
  • 两个正整数的最大公约数   思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x – y) (x >=y > 0)。根据通式写出算法不难,这里就...
  • java代码-求最大公约数最小公倍数
  • c++求最大公约数

    2014-12-27 21:26:00
    有关c++求最大公约数的代码,用的是辗转相除法,很简单的算法过程,主要是求最大公约数
  • 该程序查找最大公约数矩阵数组。
  • C++求最大公约数的四种方法思路,供大家参考,具体内容如下 将最近学的求最大公约数的四种方法总结如下: 第一种:穷举法之一 解释:拿其中一个数出来,用一个临时变量(tem)保存,每次都把那两个数除以这个临时...
  • 方法一:利用定义法求最大公因数和最小公倍数 #include<stdio.h> int main() { int a,b,i,j; int max=0; scanf("%d%d",&a,&b); for(i=a;;i++)//求最小公倍数 { if(i%a==0&&i%b==0)//...

    方法一:利用定义法求最大公因数和最小公倍数

    #include<stdio.h>
    int main()
    {
    	int a,b,i,j;
    	int max=0;
    	scanf("%d%d",&a,&b);
    	for(i=a;;i++)//求最小公倍数
    	{
    		if(i%a==0&&i%b==0)//用大于等于a和b的数i(i大于等于a和b,无上限)分别除以a和b,同时除尽的第一个数即为最小公倍数
    		break;//然后循环结束
    	}
    	
    	for(j=1;j<=a;j++)//求最大公约数
    	{
    		if(a%j==0&b%j==0)//让a和b分别除以j(j从一开始,j有上限要小于等于a或b)
    //利用j++,如果a和b能同时除尽j
    		{
    			if(max<j)//再判断j是不是小于a或b的最大公约数,不是则赋值最大值
    			max=j;//这样求出来的max即为最大公约数
    		}
    		
    	}
    	printf("%d %d\n",i,max);//最后最大公约数用max表示了
    	return 0;
    } 

    方法二:最小公倍数求法同上,最大公约数方法不同

    #include<stdio.h>
    int main()
    {
    	int a,b,i,j;
    	int max=0;
    	scanf("%d%d",&a,&b);
    	for(i=a;;i++)
    	{
    		if(i%a==0&&i%b==0)//求最小公倍数(方法同法一) 
    		break;
    	}
    
    	for(j=a;;j--)//求最大公约数
    	{
    		if(a%j==0&&b%j==0)//还是用a和b除以j(j直接赋值为a或b,示例赋值为a(b也可以的))
    //利用j--,第一个a和b同时除尽的数j即为最大公约数
    		break;//然后直接结束循环即可
    	}
    	printf("%d %d\n",i,j);
    	
    	return 0;
    } 

    方法一方法二的结果示例如下

     

    方法三:利用辗转相除法求最大公约数和最小公倍数

    #include<stdio.h>
    	int main(void)
    	{  
    	  int m,n,t,a,b;
    	  t=0;
    	  scanf("%d %d",&m,&n);
    	  a=m;
    	  b=n;//先把m和n分别赋值给a和b,用来求最小公倍数
    
          //法(1)
    	  /*
            while(t=m%n,t!=0)//限制条件有两个
        //求出最小公约数和最大公倍数的数值与m和n大小无关,所以不用考虑是m%n还是n%m,结果一样
    		{
    			m=n;
    			n=t;
    		}
    		printf("最大公约数是:%d\n",n);//最后n为最大公约数
    		printf("最小公倍数是:%d\n",a/n*b);
           */
    
          //法(2)
        while (n != 0)//一个限制条件
    	{
    		t = m % n;//t的赋值在限制条件里面
    		m = n;
    		n = t;
    	}
    	printf("最大公约数是:%d\n", m);//最后m为最大公约数
    	printf("最小公倍数是:%d\n", a / m * b);
    //最小公倍数求法和上边一样(除以n(最大公因数)变成除以m)
    
    
           return 0;
    	}
    

    法(1)结果示例如下:

     法(2)示例结果如下:

     以上就是用C语言循环和循环之前的章节知识总结的最大公约数和最小公倍数的求法,也可以利用函数来求公因数和公倍数,但核心部分还是一样的啊。

    展开全文
  • 最大公约数:指两个或多个整数共有约束中最大的一个。 最小公倍数:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个。 代码如下:/// <summary>///...
  • 包含了:1.辗转相除法函数嵌套流程图2.辗转相除法函数递归流程图3.穷举法求最小公倍数流程图4.穷举法求最大公约数流程图5.更相减损术流程图
  • 两个数的最大公约数最小公倍数工具
  • 用C语言写的,求最大公约数最小公倍数的代码
  • show 程序代码 废话不多说,直接上程序片段 nummax,nummin=eval(input("请输入两个正整数,并用逗号连接:")...print("其中最大公约数是:"+str(m)) print(str(nummax)+"和"+str(nummin)+"的最小公倍数数是:
  • 输入两个正整数可以选择不同的算法去计算其最大公约数
  • 主要介绍了java求最大公约数最小公倍数的方法,涉及java数值运算的相关操作技巧,并附带分析了eclipse环境下设置运行输入参数的相关操作技巧,需要的朋友可以参考下
  • Python求最大公约数的五种常见方法

    千次阅读 多人点赞 2022-07-10 18:03:32
    Python求最大公约数的五种常见方法

    求最大公约数是习题中比较常见的类型,下面小编会给大家提供五种比较常见的算法,记得帮忙点个赞哦!

    一般来说,最大公约数的求法大概有5种

    方法一:短除法

            短除法是求最大公因数的一种方法,也可用来求最小公倍数。求几个数最大公因数的方法,开始时用观察比较的方法,即:先把每个数的因数找出来,然后再找出公因数,最后在公因数中找出最大公因数。后来,使用分解质因数法来分别分解两个数的因数,再进行运算。之后又演变为短除法。短除法运算方法是先用一个除数除以能被它除尽的一个质数,以此类推,除到两个数的商是互质数为止。

            简单来说就是逐步找出两个数的所有公约数,再将这些公约数累乘起来,就能得到最大公约数啦!

    a=int(input("please input the first number:"))
    b=int(input("please input the second number:"))
    m,n=a,b #  创建两个变量存储a和b
    t=1 #  创建t作为最大公约数的载体
    for i in range(2,min(a,b)):
        while (a%i==0 and b%i==0):
           t*=i #  所有公约数累乘起来
           a/=i
           b/=i
    print((f"{m},{n}的最大公约数为:{t}"))

            这种方法虽然有点麻烦,但是逻辑却很清楚,不容易出错。

    方法二:欧几里得算法(辗转相除法)

            欧几里得算法是用来求两个正整数最大公约数的算法。古希腊数学家欧几里得在其著作《The Elements》中最早描述了这种算法,所以被命名为欧几里得算法。      

            假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:

    1997 / 615 = 3······152

    615 / 152 = 4······7

    152 / 7 = 21······5

    7 / 5 = 1······2

    5 / 2 = 2······1

    2 / 1 = 2······0

            至此,最大公约数为1

            以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。

            明白了这其中的逻辑,我们就可以着手开始写程序啦!

    a=int(input("please input the first number:"))
    b=int(input("please input the second number:"))
    #  首先要给两数排序,保证大数除以小数
    m=max(a,b)
    n=min(a,b)
    t=m%n
    while t!=0:
        m,n=n,t #  仔细观察不难发现:每个除式的m、n是都是上一个式子的n和余数
        t=m%n #  更新余数
    print(f"{a}和{b}的最大公约数为{n}")

            当然了,递归方法也能实现欧几里得算法。

    def GCD(a,b):
        #  比较大小,保证大数除以小数
        if a<b:
            a,b=b,a
        #  判断是否能整除,若能整除,直接返回被除数
        if a%b==0:
            return b
        #  若不能整除,则返回函数GCD,参数做相应变化
        else:
            return GCD(b,a%b)
    a=int(input("please input the first number:"))
    b=int(input("please input the second number:"))
    gcd=GCD(a,b)
    print(f"{a}和{b}的最大公约数为{gcd}")

    方法三:更相减损术

            更相减损术是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。原文是:

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

    白话文译文:

    (如果需要对分数进行约分,那么)可以折半的话,就折半(也就是用2来约分)。如果不可以折半的话,那么就比较分母和分子的大小,用大数减去小数,互相减来减去,一直到减数与差相等为止,用这个相等的数字来约分。

            具体步骤:

    第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。

    第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。

    则第一步中约掉的若干个2的积与第二步中等数的乘积就是所求的最大公约数。

    其中所说的“等数”,就是公约数。求“等数”的办法是“更相减损”法。

            现在使用更相减损术求98与63的最大公约数

    解:由于63不是偶数,把98和63以大数减小数,并辗转相减

    98-63=35

    63-35=28

    35-28=7

    28-7=21

    21-7=14

    14-7=7

    所以,98和63的最大公约数等于7。

    a=int(input("please input the first number:"))
    b=int(input("please input the second number:"))
    #  首先要给两数排序,保证大数减小数
    m=max(a,b)
    n=min(a,b)
    #  判断两数是否都是偶数,如果都是偶数就同时除2
    while m%2==0 and n%2==0:
        m,n=m/2,n/2
    t=m-n
    #  判断条件是减数和差相等
    while n!=t:
        m,n=max(n,t),min(n,t) #  每减一轮之后,都要重新判断减数和差的大小,再次以大数减去小数
        t=m-n
    print(f"{a}和{b}的最大公约数为{n}")

    方法四:穷举法(枚举法)

            从两个数中较小数开始,由小到大列举,找出公约数并保证该公约数也属于较大数,这些公约数的最大者就是最大公约数;也可以从大到小列举,直到找出公约数后跳出循环,该公约数即是最大公约数。

    a=int(input("please input the first number:"))
    b=int(input("please input the second number:"))
    p,q=min(a,b),max(a,b)
    lst=[]
    for i in range(1,p+1):
        if p%i==0 and q%i==0:
            lst.append(i)
    gcd=max(lst)
    print(f"{a}和{b}的最大公约数为{gcd}")
    
    #a=int(input("please input the first number:"))
    #b=int(input("please input the second number:"))
    #p,q=min(a,b),max(a,b)
    #gcd=0
    #for i in range(p,0,-1):
    #    if p%i==0 and q%i==0:
    #        gcd=i
    #        break
    #print(f"{a}和{b}的最大公约数为{gcd}")
    

    方法五:Stein算法

            Stein算法是一种计算两个数最大公约数的算法,是针对欧几里德算法在对大整数进行运算时,需要试商导致增加运算时间的缺陷而提出的改进算法。

    欧几里得算法缺陷:

            欧几里德算法是计算两个数最大公约数的传统算法,无论从理论还是从实际效率上都是很好的。但是却有一个致命的缺陷,这个缺陷在素数比较小的时候一般是感觉不到的,只有在大素数时才会显现出来。

            一般实际应用中的整数很少会超过64位(当然已经允许128位了),对于这样的整数,计算两个数之间的模是很简单的。对于字长为32位的平台,计算两个不超过32位的整数的模,只需要一个指令周期,而计算64位以下的整数模,也不过几个周期而已。但是对于更大的素数,这样的计算过程就不得不由用户来设计,为了计算两个超过64位的整数的模,用户也许不得不采用类似于多位数除法手算过程中的试商法,这个过程不但复杂,而且消耗了很多CPU时间。对于现代密码算法,要求计算128位以上的素数的情况比比皆是,设计这样的程序迫切希望能够抛弃除法和取模。

    看下面两个结论:

            gcd(a,a)=a,也就是一个数和其自身的公约数仍是其自身。
            gcd(ka,kb)=k gcd(a,b),也就是最大公约数运算和倍乘运算可以交换。特殊地,当k=2时,说明两个偶数的最大公约数必然能被2整除。

            当k与b互为质数,gcd(ka,b)=gcd(a,b),也就是约掉两个数中只有其中一个含有的因子不影响最大公约数。特殊地,当k=2时,说明计算一个偶数 和一个奇数的最大公约数时,可以先将偶数除以2。

            :param a: 第一个数

            :param b: 第二个数

            :return: 最大公约数

    def gcd_Stein(a, b):
        #  保证b比a小
        if a < b:
            a, b = b, a
        if (0 == b):
            return a
        #  a、b都是偶数,除2右移一位即可
        if a % 2 == 0 and b % 2 == 0:
            return 2 * gcd_Stein(a / 2, b / 2)
        #  a是偶数
        if a % 2 == 0:
            return gcd_Stein(a / 2, b)
        #  b是偶数
        if b % 2 == 0:
            return gcd_Stein(a, b / 2)
        #  都是奇数
        return gcd_Stein((a + b) / 2, (a - b) / 2)
    
    a=int(input("please input the first number:"))
    b=int(input("please input the second number:"))
    gcd=int(gcd_Stein(a,b))
    print(f"{a}和{b}的最大公约数为{gcd}")

    以上就是小编总结的五种常用方法了,希望对各位有所帮助!记得点赞喔!

    展开全文
  • 主要介绍了PHP编程求最大公约数最小公倍数的方法,涉及php数学计算的相关运算技巧,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 76,266
精华内容 30,506
热门标签
关键字:

怎样求最小公约数