实用算法实现-第 25 篇 最大公约数

数据结构和算法-数学问题-最大公约数 本文为joshua317原创文章,转载请注明:转载自joshua317博客数据结构和算法-数学问题-最大公约数 - joshua317的博客 一、最大公约数说明 最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。约数和倍数都表示一个整数与另一个整数的关系,不能单独存在。比如,只能说8是某数的倍数,2是某数的约数,而不能孤立地说8是倍数,2是约数。 几个自然数公有的约数,叫做这几个自然数的公约数。其中最. 阅读详情

最大公约数有经典算法Euclid算法可以求出。而对于正整数a、b,若将它们的最大公约数表示为gcd(a, b),最小公倍数表示为lcm(a, b),那么有公式:a • b = gcd(a, b) • lcm(a, b)。由这个公式,可以求得两个数的最小公倍数。

25.1    Euclid算法

int Euclid(int a, intb)
{
/*
欧几里德算法
GCD递归定理:
对任意非负证书a和任意正整数b
gcd(a, b) = gcd(b, a mod b)
*/
     if(b == 0){
         returna;
     }else{
         returnEuclid(b, a % b);
     }
}

25.2    Euclid算法的扩广形式

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
struct Euclid{
     int d;
     int x;
     int y;
};
EuclidextendedEuclid(int a, intb)
{
/*
欧几里德算法
GCD递归定理:
对任意非负数a和任意正整数b
gcd(a, b) = gcd(b, a mod b)
d = gcd(a, b) = a * x + b * y
返回的x, y有可能是负数
*/
     Euclid temp;
     Euclid temp1;
     if(b == 0){
         temp.d = a;
         temp.x = 1;
         temp.y = 0;
         returntemp;
     }
     temp = extendedEuclid(b, a % b);
     temp1.d = temp.d;
     temp1.x = temp.y;
     temp1.y = temp.x -((a / b) * temp.y);
     returntemp1;
}
int main()
{
     int a, b;
     Euclid temp;
     while(cin>> a >> b)
     {
         temp = extendedEuclid(a, b);
         cout << temp.d << ":"<< temp.x << ":"<< temp.y <<endl;
     }
     return 1;
}
本文章欢迎转载,请保留原始博客链接http://blog.youkuaiyun.com/fsdev/article

Python实现最大公约数算法及完整源码 在公因数法中,我们使用for循环和if条件语句来计算出这两个数的所有公因数,并将它们保存在一个数组common_factors中。最后,我们通过调用max函数来找出所有公因数中的最大值,即它们的最大公约数。上述代码中,我们分别调用了gcd函数来计算三组数据的最大公约数,并输出它们的计算结果。如果结果与我们预期的一致,则说明我们的最大公约数算法是正确的。本文介绍了Python实现最大公约数算法的两种方法:辗转相除法和公因数法,并给出了完整的源代码。其中a、b是要求最大公约数的两个整数,r是它们的余数。 阅读详情

相关推荐

25、二进制递归最大公约数算法

本文介绍了一种基于广义二进制除法(GB除法)的二进制递归最大公约数(GCD)算法,作为Knuth-Schönhage算法的改进变体。该算法避免了传统算法中复杂的‘修正程序’,在描述和证明上更为简洁,同时保持了相同的准线性时间复杂度。文章详细阐述了GB除法的原理、GB欧几里得算法的实现、递归算法的设计及其正确性证明,并讨论了算法在不同输入规模下的优化策略。实验表明,在GNU MP中的实现相比Magma和Mathematica中的经典算法,在大整数输入下快3到4倍,具有显著的性能优势。

tomato的博客 157

最大公约数(Euclid算法)

#include "stdafx.h"//求最大公约数int Euclid(int a,int b){      if(b==0)            return a;      else            return Euclid(b,a%b);}int _tmain(int argc, _TCHAR* argv[]){      int a=9;      int b=6; 

Allin's blog 2033

Abel逆变换及其求解方法

Abel逆变换常应用在轴对称的、光学薄的火焰、羽流或等离子体重建。

weixin_49783507的博客 8371

编程题 求最大公约数

暴力枚举法 暴力枚举的方法从较小整数的一半开始,试图找到一个合适的整数 i,看看这个整数能否被 a 和 b 同时整除。 public static int getGreatestCommonDivisor(int a, int b) { int big = a > b ? a : b; int small = a < b ? a : b; if (big % s...

siriusol的博客 1992

基于stm32f407VGT6控制WS2812的TIM1+PWM+DMA实现方式

项目中使用到了ws2812灯带,作为产品的外观显示灯,经过开发之后,整理一下,仅供大家参考。 WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。 其外型与一个5050 LED灯珠相同, 每个元件即为一个像素点。 像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路, 还包含有高精度的内部振荡器和可编程定电流控制部分, 有效保证了像素点光的颜色高度一致。数据协议采用单线归零码的通讯方式, 像素点在上电复位以后, DIN端接受从控制器传输过来的数据, 首先送过来的24bit数据被第一个像素

weixin_43608153的博客 9214

行为验证码 AJ-Captcha 使用文档

AJ-Captcha验证码系统集成指南:需添加captcha-spring-boot-starter和Redis依赖,配置Redis连接。核心实现包括Redis缓存服务类CaptchaCacheRedisImpl(含设置、查询、删除验证码等方法)、SPI配置文件及Spring Boot配置类(配置验证码属性和Redis模板)。系统支持验证码生成、校验、防刷等安全功能,适用于Web应用安全验证场景。

千层冷面的博客 2115

求最大公约数的5种算法

一、题目要求 运行最大公约数的常用算法,并进行程序的调式与测试(至少比较4种GCD算法在给定不同规模测试数据的情况下的平均运行时间),要求程序设计风格良好,并添加异常处理模块(如输入非法等)。 二、设计思路 利用随机函数rand()生成两个一维数组(20个数),然后用户可以选择自己想要用的方法的序号,进行运算,然后利用计时函数计算出算法运行的时间。 三、算法流程图 1.辗转相除法(嵌套调用) 其算...

weixin_42959372的博客 7041

(UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

在 (UE4 4.27) UHierarchicalInstancedStaticMesh(HISM)原理分析 这篇博客大致介绍HISM组件从游戏线程到渲染线程的重建KD-Tree和剔除并提交DrawCall逻辑,但是没有分析渲染层的大致数据结构和实现. 可以看出FHierarchicalStaticMeshSceneProxy 实际存储Instance数组数据来自于FInstancedStaticMeshSceneProxy FHierarchicalStaticMeshSceneProxy只是以FClu

qq_29523119的博客 2725

算法-求最大公约数

算法 最大公约数 辗转相除法 欧几里得算法 九章算术 更相减损术 位运算 判断奇偶数

IceDarron's Blog 671

5G NR LDPC码(2)—— 从基图到速率匹配:解码5G高速数据信道的标准化设计

本文深入解析了5G NR LDPC码的标准化设计流程。从作为核心骨架的基图(BG1/BG2)出发,详细阐述了其如何通过扩展因子Z灵活生成实际校验矩阵,并协同传输块大小计算与分段策略。文章重点剖析了基于循环缓存和冗余版本的速率匹配机制,以及其如何高效支撑增量冗余混合自动重传请求,从而确保5G高速数据信道在复杂环境下的可靠与高效传输。

weixin_29206669的博客 272

在 SAP S/4HANA Private Cloud 中把标准 CDS View 发布为 OData:可操作的四条路径与完整示例

在 ADT 中创建。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 726

25行代码实现完整的RSA算法Java版

25行代码实现完整的RSA算法Java版   我的上一篇博客《25行代码实现完整的RSA算法》自从上个月发表了以后,很多程序员给我打电话或者发短信说,终于看到了一篇能把RSA算法的代码写明白的,他们问我说能不能把代码写成Java版的,我说Java的会看着很费劲,Python代码的直观性在数字计算方面有很大的优势。   但是架不住他们非要我写,我一拍肩膀说,好吧,我答应你们的请求。花了一晚上的时...

专栏 1万+

YOLOv12改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是基于StarNet的YOLOv12轻量化改进方法研究。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 1215

25行代码实现完整的RSA算法

25行代码实现完整的RSA算法   网络上很多关于RSA算法的原理介绍,但是翻来翻去就是没有一个靠谱的算法实现,即使有代码介绍,也都是直接调用JDK或者Python代码包中的API实现,或者即使有代码也都写得特别烂。无形中让人感觉RSA加密算法竟然这么高深,然后就看不下去了。还有我发现对于“大整数的幂次乘方取模”竟然采用直接计算的幂次的值,再取模,类似于(2 ^ 1024) ^ (2 ^ 102...

专栏 5万+

【WRF-Chem工具】pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

WW、forever的博客 210

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

递归实现求最大公约数

辗转相除法 辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求两个正整数之最大公约数的算法。它是已知最古老的算法, 其可追溯至公元前300年前。 它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。 另一种求两数的最大公约数的方法是更相减损法。 来源: 设两数为a、b(a>b),求a和b最大公约数(a,b)的步

小白兔奶糖の博客 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

浅析求两个数的最大公约数的三种算法

第一种方法:#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h>int Max_Com_Divisor(int x, int y)//用辗转相减法求最大公约数 { while (1)//用大数减去小数并将结果保存在大数中 { if (x > y

小葱的博客 4万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

使用Euclid算法求最大公约数

参考文章    1、《linux c编程一站式学习》的习题5.3.1   2、百度百科Euclid算法:https://baike.baidu.com/item/Euclid%E7%AE%97%E6%B3%95 思想   使用Eucid算法编写两个正整数a和b的最大公约数(GCD, Greatest Common Dvisor)   1、如果a能整除b, 则最大公约数是b   2、否则...

weixin_30251587的博客 1196

最大公约数简便算法_三种求最大公约数的方法

一、辗转相除法原理:辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。原理设两数为a、b(b第一步:令c=gcd(a,b),则设a=mc,b=nc第二步:根据前提可知r =a-kb=mc-knc=(m-kn)c第三步:根据第二步结果可知c也是r的因数第四步:可以断定m-kn与n互质【否则,可设m-kn=xd,n=yd,(d>1),则m=...

weixin_31313019的博客 4310

python:实现greatest common divisor最大公约数算法

计算最大公约数(Greatest Common Divisor, GCD)的算法有多种,其中最著名和常用的是欧几里得算法(Euclidean algorithm)。下面我会详细介绍欧几里得算法的基本思想及其实现方式。欧几里得算法欧几里得算法基于一个定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。用数学表达式表示就是:其中,gcd(a, b)表示a和b的最大公约数,a mod b表示a除以b的余数。算法步骤比较两个数a和b,如果a小于b,则交换它们。

luthane的博客 768

rsa算法python_Python 25行代码实现的RSA算法详解

本文实例讲述了Python 25行代码实现的RSA算法。分享给大家供大家参考,具体如下:网络上很多关于RSA算法的原理介绍,但是翻来翻去就是没有一个靠谱的算法实现,即使有代码介绍,也都是直接调用JDK或者Python代码包中的API实现,或者即使有代码也都写得特别烂。无形中让人感觉RSA加密算法竟然这么高深,然后就看不下去了。还有我发现对于“大整数的幂次乘方取模”竟然采用直接计算的幂次的值,再取模...

weixin_39929595的博客 368

python用递归方式实现最大公约数_Pyhton递归与欧几里得算法求最大公约数

题目要求:使用递归编写一个函数,利用欧几里得算法求最大公约数,例如 gcd(x, y) 返回值为参数 x 和参数 y 的最大公约数。欧几里得算法:欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。欧几里德算法是用来求两个正整数最大公约数的算法。是由古希腊数学家欧几里德在其著作《The E...

weixin_40001025的博客 1619

算法--递归辗转相除法求最大公约数

辗转相除法定义:两个整数a,b有a%b=c,如果c不等于0,则有b%c=d,如果d不为零,则依次类推,如果d为0,则最大公约数就是c。 例子:有25和20两个整数,25%20=1余5,20%5=0,则两个整数最大公约数就是5。 代码实现: import java.util.Scanner; public class exercise_Rolling_phase_division { public static void main(String[]args) { Scanner sc

Jing_Hua 1314
上一篇: 实用算法实现-第 24 篇 高精度整数运算
下一篇: 实用算法实现-第 26 篇 模运算
存储李希
博客等级 码龄15年 418粉丝 69原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值