最大公约数 最小公倍数

Python求最大公约数和最小公倍数 大家好,我是Python领域的博主,如果觉得我的写的不错的话, 请点赞关注支持我一下。如果你是初学者,可以和小编一起学习,在这里我每天都会发Python的基础知识,以及相关的代码 解题思路: 最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个;最小公倍数是指两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。最小公倍数=两整数的乘积÷最大公约数 , 所以怎么求最大公约数是关键。 求最大公约数: 辗转相除法是求最大公. 阅读详情

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

有两大种方法:求解最大公约数有欧几里德算法和stein算法。其中欧几里德算法又分为一般的和扩展的欧几里德算法。

而求解两数的最小公倍数则利用了它们的最大公约数,有公式lcm(a,b)=a*b/gcd(a,b)。lcm是最小公倍数的英文缩写,gcd同样。

所以求解最小公倍数的代码只在一般欧几里德算法分析中介绍下,读者可以举一反三。

 

一、欧几里德算法

1、一般欧几里德算法(只求最大公约数)

求最大公约数一个经典的方法就是辗转相除法了。以下将要介绍的代码也是利用其求解的。

其中,求解最大公约数用了递归和非递归两种方法,代码中有注释。  

 

代码如下:

#include<iostream>
using namespace std;

int gcd(int a,int b)  //a,b最大公约数,递归 
{
	if(b==0)
		return a;
	else
	    return gcd(b,a%b);
}

int GCD(int a,int b)   //a,b最大公约数,非递归 
{
    int tem;
    
    if(a<b)
    {
       tem=a;
       a=b;
       b=tem;
    }
    
    int rem=1;
    while(rem!=0)
    {
        rem=a%b;
        a=b;
        b=rem;
    }
    
    return a;
}

 
int lcm(int a,int b)  //最小公倍数 
{
    return a*b/gcd(a,b);
}

int main()
{
    int a,b,lc,gc1,gc2;
    
    cout<<"输入:"; 
    while(cin>>a>>b)
    {
       gc1=gcd(a,b);
       gc2=GCD(a,b);
       lc=lcm(a,b);
       
       cout<<"最大公约数:"<<gc1<<endl;
       cout<<"最大公约数:"<<gc2<<endl;
       cout<<"最小公倍数:"<<lc<<endl;
       cout<<endl;
       cout<<"输入:"; 
    }
    
    return 0;
}
 

         测试结果:

 再来啰嗦两句。求解最大公约数的非递归方法应该说很好理解,完全的辗转相除法。而递归方法则由于没有判断a,b的大小关系,很容易让人迷惑。

 比如,输入28   1274时,会有人觉得不能求解。其实,输入28   1274和输入1274   28是基本一样的。解释如下:输入28   1274,调用gcd(28,1274),

 b=1274,b!=0,所以执行return  gcd(b,a%b)也即return  gcd(1274,28)。因为28%1274=28!到此,已经和直接输入1274   28一样了。

2、扩展欧几里德算法(不仅仅可求出最大公约数,还可解出方程ax+by=gcd(a,b)中的x和y)

其详细描述及证明,请参考:点击打开链接

 

算法代码:

int extendGcd(int a,int b,int &x,int &y)   //扩展gcd,可以求出gcd(a,b)以及ax+by=gcd(a,b)中x,y的值
{
	if(b==0)
	{
		x=1;
		y=0;

		return a;
	}
	else
	{
		int a1=extendGcd(b,a%b,x,y);
		
		int tmp=x;
		x=y;
		y=tmp-a/b*y;

		return a1;
	}
}

 

二、Stein算法

Stein算法与欧几里德算法的不同是:Stein算法只有整数的移位与加减法,不需要进行除法和取模运算。

 

算法描述:

(1)判断a或b是否为0,若a=0,则b就是最小公倍数;若b=0,则a就是最小公倍数。算法结束。

(2)设a1=a,b1=b,c1=1。

(3)判断an、bn是否为偶数

①若都是偶数,则令a(n+1)=an/2,b(n+1)=bn/2,c(n+1)=2*cn。

②若an是偶数,则令a(n+1)=an/2,b(n+1)=bn,c(n+1)=cn。

③若bn是偶数,则令a(n+1)=an,b(n+1)=bn/2,c(n+1)=cn。

④若an、bn都是奇数,则令a(n+1)=|an-bn|,b(n+1)=min(an,bn),c(n+1)=cn。

(4)n累加1,跳转到(3)进行下一轮计算。

 

算法代码如下:

方法一:

int gcd(int a,int b)
{
	int min=(a>b)?b:a;
	int max=(a>b)?a:b;

	if(min==0)
		return max;
	if(max%2==0 && min%2==0)
		return 2*gcd(max/2,min/2);
	if(max%2==0)
		return gcd(max/2,min);
	if(min%2==0)
		return gcd(max,min/2);
	return gcd((max+min)/2,(max-min)/2);  //都是奇数,貌似和算法给出的不太一样,我测试了几组数据都是对的。。。
}


方法二:

int gcd(int a,int b)
{
	int min=(a>b)?b:a;
	int max=(a>b)?a:b;

	if(!min)
		return max;
	if(!max)
		return min;
	if(!(min&1) && !(max&1))  //都是偶数
		return gcd(min>>1,max>>1)<<1;
	if(!(min&1))      //小数为偶
		return gcd(min>>1,max);
	if(!(max&1))      //大数为偶
		return gcd(min,max>>1);

	//return gcd((max-min)>>1,min);  //都是奇数,不知道为啥这个也行???
    return gcd(max-min,min);  //都是奇数
}


 

 

 

 

 

用LabVIEW求最大公约数和最小公倍数 用LabVIEW求最大公约数和最小公倍数。可以自行选择数据。 立即下载

相关推荐

labview实例

将任意两个数a、b的最大公约数c和最小公倍数d显示在前面板(计算最大公约数和最小公倍数的时候必须以调用之前写好的子vi的形式)

求两个正整数的最大公约数

import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: Wu Ruixi * Date:2019/10/17 * Time:21:21 **/ public class Work2_6 { // 求两个正整数的最大公约数 public static void ma...

qq_43149653的博客 261

最小公倍数 最大公约数_最小公倍数_最大公约数_

计算任意几个数的最小公倍数和最大公约数(简单方式\有子VI)

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

1.概念 最大公约数(Greatest Common Divisor:GCD)指某几个整数共有约数中最大的一个。最小公倍数(least common multiple:lcm)是某几个整数公有的倍数中最小的一个正整数。 2.相互之间关系及证明 两个整数的最小公倍数与最大公约数之间有如下的关系:最小公倍数 = 两数之积 / 最大公约数 证明1: 设a,b两个整数,假...

weixin_30920513的博客 321

(蓝桥杯)STM32G431RBT6(SysTick timer)

选用最基础的定时器。

2301_81764359的博客 1903

IEEE Access投稿全流程解析:从初次提交到最终接收的完整指南

本文详细解析了IEEE Access期刊从初次投稿到最终接收的全流程,包括ORCID注册、论文投稿七步法、回稿再投流程及最终版提交等关键步骤。特别强调了4-6周快速同行评审的特点,为研究者提供了一份实用的投稿指南,帮助高效完成IEEE Access期刊投稿。

weixin_29273849的博客 915

最大公约数和最小公倍数

#include using namespace std; int gcd(int x,int y) { int c; while(y!=0) { c=x%y; x=y; y=c; } return x; } int main() { int a,b,d; cin>>a>>b; for

as1246170471的专栏 332

Unity实战篇 | 教你怎样将Unity的启动Logo 设置成 自己制作的 帧动画

上一篇文章我们讲了怎样在不购买专业版的情况下自定义Unity的启动Logo。 那本篇文章就来介绍一下,怎样在去除默认Logo的前提下制作自己的启动动画!

努力前行,总会成为自己心中的那道光 6万+

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

最大公约数是指两个数相同因子总最大的那个,比如35和42,最大公倍数是7。要求最大公倍数,最常用的算法是辗转相除法,详见下面的代码; 最小公倍数是指两个数共有的倍数中最小的那个,比如35和42,最小公倍数是210,6和12,最小公倍数是12。两个数如果有最大公约数的话,他们的最小公倍数就是他们的乘积处以他们的最大公约数,如果没有最大公约数,那他们的最小公倍数就是他们的乘积。 #include

nyist327的专栏 1074

【漏洞复现】WordPress Plugin NotificationX 存在sql注入CVE-2024-1698

技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。WordPress和WordPress plugin都是WordPress基金会的产品。WordPress Plugin NotificationX 存在安全漏洞,该漏洞源于对用户提供的参数转义不充分以及对现有 SQL 查询缺乏充分的准备,很容易通过“type”参数受到 SQL 注入攻击。

失心少年 1385

qt项目中添加 jsoncpp 库

qt使用jsoncpp库

deroy 1354

C语言—最大公约数和最小公倍数

如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数。约数和倍数都表示一个整数与另一个整数的关系,不能单独存在。如只能说16是某数的倍数,2是某数的约数,而不能孤立地说16是倍数,2是约数。最大公约数就是最大的约数。公倍数是指在两个或两个以上的 自然数 中,如果它们有相同的 倍数 ,这些倍数就是它们的公倍数。公倍数中最小的,就称为这些 整数 的 最小公倍数。

做梦都想要三十万年薪~ 3159

RK3588 实战级 YOLOv5 Android 全解析:NPU 量化 + 多线程 + 跟踪算法,源码一次买齐

本文将带你完成一个完整的AI视觉项目:在搭载RK3588芯片的Android开发板上运行实时目标检测与跟踪应用。实战目标:成功运行官方YOLOV5摄像头实时检测案例技术深度:深入理解RKNN开发框架和源码实现核心技能:掌握NPU推理、多线程并发、目标跟踪等关键技术。

FJN110的博客 157

最大公约数与最小公倍数的详细讲解及求法

最大公约数的基本概念 能够整除一个整数的整数称为其的约数(如5是10约数);能够被一个整数整除的整数称为其的倍数(如10是5的倍数);如果一个数既是数A的约数,又是数B的约数,称为A,B的公约数,A,B的公约数中最大的一个(可以包括AB自身)称为AB的最大公约数。 辗转相除法求最大公约数 辗转相除法的基本做法 用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数 in

sjp11的博客 3万+

063、推挽变换器的磁偏问题与解决

本文针对推挽变换器中的磁偏问题展开分析。作者通过实际案例指出,磁偏主要由开关管导通压降差异和驱动信号不对称引起,会导致变压器饱和、MOS管炸毁等问题。文章提供了四种解决方案:采用电流模式控制、添加隔直电容、优化对称驱动设计以及引入磁芯气隙(作为最后手段)。调试时应重点观察原边电流波形对称性、变压器声音和直流分量。作者强调实践经验的重要性,建议预留隔直电容位置,并指出推挽拓扑在500W以上功率场合的局限性。这些基于实战的经验总结为电源工程师提供了有价值的参考。

Jack010169的博客 312

超声波传感器(CHx01) 学习笔记 Ⅲ - I2C读写操作

CH-x01 通过 2 线 I2C 协议与主机处理器通信

nicole088的专栏 1740

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

Java—最小公倍数和最大公约数 Description 从键盘输入两个正整数,求这两个正整数的最小公倍数和最大公约数,并输出。 Input 输入包括一行。 两个以空格分开的正整数。 Output 两个整数的最小公倍数和最大公约数。 Sample Input 6 8 Output 24 2 import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-gener

qq_45885219的博客 4541

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java最大公约数与最小公倍数

public class _01_最大公约数与最小公倍数 { public static void main(String[] args) { System.out.println("请输入第一个正整数:"); Scanner sc = new Scanner(System.in); int m = sc.nextInt(); ...

Superman_peng的博客 1308

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

求解最大公约数以及最小公倍数

  最大公约数和最小公倍数求解,常用的方法是短除法进行因式分解,然后最大公约数是所有公共因子的乘积,最小公倍数是所有因子的乘积。 本质上求最小公倍数就是求最大公倍数:x=ma, y=mb;m是最大公约数,那最小公倍数就是mab。所以可以得到最大公约数与最小公倍数的关系: LCM(A,B)×GCD(A,B)=A×B 其中LCM是最小公倍数,GCD是最大公约数 来源:https://blog.cs...

1724

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

最大公约数与最小公倍数

在前面的课程中,我们已经学习了 Python 的基本输入输出、数据类型及其转换、顺序结构、分支结构、循环结构、循环控制语句、字符串类型、列表类型、元组类型、字典类型、集合类型、函数的定义与使用、函数调用与作用域以及函数的高级应用。通过本课时的学习,你已经掌握了 Python 中的最大公约数和最小公倍数的概念,并通过具体的示例展示了如何计算两个数的最大公约数和最小公倍数。例如,12和18的最大公约数是6。现在我们通过一个综合示例来展示如何计算两个数的最大公约数和最小公倍数,并将这两个功能封装在一个主程序中。

qq_57335683的博客 946

python计算最大公约数和最小公倍数_python怎么求最大公约数和最小公倍数

详细内容python怎么求最大公约数和最小公倍数一、求最大公约数用辗转相除法求最大公约数的算法如下:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5,那么10和25的最大公约数,等同于10和5的最大公约数。具体代码如下:def gongyue(a, b):"""欧几里得算法----辗转相除法:param a: 第一个数...

weixin_30486717的博客 5083
上一篇: 函数 运算符 重载
下一篇: 指针浅谈
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值