求最大公约数的两种解法(欧几里得算法和素数分解)

用Python实现欧几里得和广义欧几里得公式并应用在中国剩余定理上 题目: 用广义欧几里得除法求两个整数的最大公因数。 用定理1.3.7求s和t使得:sa+tb = (a,b) 。 以上两题要求对任意大整数给出结果。 这里给出python的题解。 这个表是对定理的打表: 递推式为: 因此用递推可得。 因为前三行的下标为-1,-2,所以用个n替换 n和j遵循同样的递推式。 因此建议直接建立一个新的递推表,下标直接沿用成n相关,验证同等位置是否和原来遵循相... 阅读详情

最大公约数的两种解法(欧几里得算法和素数分解)

方法一: 欧几里得算法,又称辗转相除法

定理(欧几里得算法):设a和b是正整数,则存在最大求最大公因子d=(a,b)的一种算法,且存在求一组整数s,t使得d = sa+tb

举个例子:求168和60的最大公约数?

                  168 = 2 * 60 + 48

                   60  = 1 * 48 +12

                   48  = 4 * 12

                 由此得最大公约数为12

关于最大公倍数

C语言程序代码:很简单就不加注释了

#include<stdio.h>
#define SWAP(a,b) {a=a+b; b=a-b; a=a-b; }
int gcd(int a,int b)
{
	if(a==b)
		return a;
	if(a<b)
		SWAP(a,b);
	int temp = 0;
	while(a%b)
	{
		temp = b;
		b = a % b;
		a = temp;
	}	
	return b;
}
int main()
{
	int a = 168;
	int b = 60;
	printf("最大公约数是: %d\n",gcd(a,b));
	return 0;
}

方法二:素数分解

我们知道每一个大于等于2的整数都可以表示为几个素数相乘的形式(算术基本定理)而且有其对应的唯一的分解式,利用这点我们也可以用来求解最大公因子(最大公约数)

例如:在上题中168 可以表示为pow(2,3)*pow(3,1)*pow(5,0)*pow(7,1)

                            60可以表示为pow(2,2)*pow(3,1)*pow(5,1)*pow(7,0)

          所以(168,60) = pow*(2,2)*pow(3,1)*pow(5,0)*pow(7,0) = 12

#include<stdio.h>
#include<math.h>
#define COUNT_PRIME 10
void Divisor(int num,int prime[],int index,int& loop)//求分解的因子的个数
{
	if(num==1)
		return;
	int count = 0;
	while(num%index==0)
	{
		num /= index;
		count++;
	}
	if(index==2)
	{
		prime[index-2] = count;
		index += 1;
	}
	else
	{
		prime[index/2] = count;
		index += 2;
	}
	Divisor(num,prime,index,loop);
	loop += 1;
}
int Gcd(int a[],int b[],int loop_a,int loop_b)//求解最大公因子
{
	int gcd = a[0]<b[0]?pow(2,a[0]):pow(2,b[0]);
	for(int i=1,j=3;i<loop_a||i<loop_b;i++,j+=2)
	{
		int num = a[i]<b[i]?pow(j,a[i]):pow(j,b[i]);
		gcd *= num;
	}
	return gcd;
}
int main()
{
	int a = 60,b = 168;
	int prime_a[COUNT_PRIME] = {0};
	int prime_b[COUNT_PRIME] = {0};
	int loop_a = 0,loop_b = 0;
	Divisor(a,prime_a,2,loop_a);
	Divisor(b,prime_b,2,loop_b);
	int gcd = Gcd(prime_a,prime_b,loop_a,loop_b);
	printf("最大公约数是: %d\n",gcd);
	printf("最大公倍数是: %d\n",a*b/gcd);
	return 0;
}

这里主要的函数在于求各个因子的个数,我使用了递归来解决这个问题

 

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

相关推荐

欧几里得&扩展欧几里得算法及相关的数学证明

//欧几里得算法求最大公约数 int gcd(int m,int n) { int u0=m,u1=n,t; if( u0=u1 u0^=u1,u1^=u0,u0^=u1; while(u0%u1) { t=u1; u1=u0%u1;

无题 2346

最大公约数求法

(PS:如果发现哪里错误,欢迎指出,万分感谢!!!) 定义:       公约数:设 a1,a2,.....,an(n>=2)个整数。若整数d是它们中每一个数的因数,则 d 就叫做a1,a2,……,an的一个公因数。       最大公因数:如果整数a1,a2,.......,an不全为0,那么整数a1,a2,.......,an的所有公因数中最大的一个公因数就叫做最大公因数,记作(a1,a

海水梦悠悠的博客 1817

C#实现快速素数分解并行算法

素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。例如2、3、5、7等都是素数。与之相对,合数则是指在大于1的自然数中,除了1和它本身外,至少还有一个正因数。例如4、6、8等。素数是指只能被1和它本身整除的大于1的自然数。例如,2、3、5、7等都是素数。相对地,除了1和它本身以外还能被其他自然数整除的数叫做合数。例如,4、6、8等就是合数。在数学中,素数具有很多独特的性质,使得它们在密码学、数论等多个领域都极为重要。

weixin_36149538的博客 703

扩展欧几里得算法-求逆

扩展欧几里得算法介绍 👀已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足等式 ax + by = gcd(a,b) 那么,扩展欧几里得算法的一个作用就是得到ax+by=gcd(a,b)的整数解。 计算过程 有两个数a,b,对它们进行辗转相除法,可得它们的最大公约数。然后,收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解。 定理公式 (根据《信息安全数学基础》一书上得出的结论公式 输出表格) c语

bibohaohao的博客 2675

sa+tb线性组合及最大公约数

就是信息安全基础课上讲的那个线性组合 程序比较小 不过比较实用

Silvaco TCAD 2018安装后,如何配置TonyPlot 5.0.22.R并解决绘图报错?

本文详细介绍了在Windows系统上安装Silvaco TCAD 2018后,如何正确配置TonyPlot 5.0.22.R并解决常见的绘图报错问题。内容包括版本兼容性分析、环境变量设置、常见错误解决方案以及性能优化建议,帮助用户顺利完成仿真结果的可视化工作。

weixin_31031711的博客 420

欧几里得算法

欧几里得算法 (Euclid's Algorithm) 定理: 1)       如果a能整除b,那么a和b的最大公约数gcd (a, b) = b 2)       如果a = bt + r,t、r均为整数,则最大公约数gcd(a, b) = gcd(b, r) ※   r能整除a和b的每个公约数,所以a和b的最大公约数必定能被r整除。同时,由(1)得,gcd (a, b) = b,因

LoveJava2012 961

Codex App 远程 SSH 连接 autodl 配置全攻略

SSH 远程连接是开发中常用的技术,通过加密通道实现本地与远程服务器的安全通信。其原理基于非对称加密和密钥对认证,确保数据传输安全。在 AI 开发场景中,远程连接能充分利用云端 GPU 算力,同时保留本地编辑器的流畅体验。autodl 作为主流算力云平台,支持通过 SSH 接入实例,但 Codex App 等工具需额外配置。本文详细讲解如何获取 autodl 的 SSH 接入信息、配置密钥登录、填写 Codex App 远程连接参数,并解决连接拒绝、权限报错等常见问题,帮助开发者高效搭建远程开发环境。

weixin_28312391的博客 257

欧几里德算法及拓展

1、欧几里德算法(辗转相除)求两个数的最大公约数 例如:求a, b的最大公约数即gcd(a, b) 当b != 0时, b = a%b, a = b,继续gcd(a, b) 当b == 0时,此时的a就是a,b的最大公约数 代码递归实现: int gcd(int a, int b) { return b ? gcd(b, a%b) : a; } 代码循环实现: int

ZWHSOUL的博客 411

HI3516CV610海思SOC:超高清智慧视觉开发全攻略

本文全面解析海思HI3516CV610 SOC在超高清智慧视觉开发中的应用。该芯片集成双核A7处理器、1Tops NPU、AI ISP及4K视频编码器,专为智能摄像头设计。文章详细介绍了开发环境搭建、核心硬件架构、媒体处理平台(MPP)实战、AI算法集成与系统调优等全流程攻略,帮助开发者高效构建稳定可靠的视觉AI产品。

weixin_29269441的博客 1252

IPD的分析工具与模型(十六)CBB公用基础模块管理实现资源共享,缩短开发周期

CBB流程的开发环节,基于CBB规划中所识别和设计的CBB,进行CBB的详细设计(包括参数设计和接口设计),并最终实现CBB的落地开发。作为特殊类型的技术构件,CBB的开发流程,可沿用技术开发中的构件开发流程,具体包括概念、计划、开发和迁移等步骤,具体可参见前文的相关介绍。有了蓝图与架构设计,落地实施是关键攻坚。具体工作内容包括:具体工作内容包括:a. 以相似性、聚类、相对独行性、可组合、可扩展性、可维护性等原则为指导,按照产品的功能特征和业务类型,聚焦零散的功能点,形成功能模块,实现产品功能模块的划分;

corgi2020的博客 2000

c语言欧几里得算法求素数,求最大公约数的两种解法(欧几里得算法和素数分解)...

最大公约数的两种解法(欧几里得算法和素数分解)方法一: 欧几里得算法,又称辗转相除法定理(欧几里得算法):设a和b是正整数,则存在最大求最大公因子d=(a,b)的一种算法,且存在求一组整数s,t使得d = sa+tb举个例子:求168和60的最大公约数?168 = 2 * 60 + 4860 = 1 * 48 +1248 = 4 * 12由此得最大公约数为12关于最大公倍数C语言程序代码:很简...

weixin_33369808的博客 1137

VS配置RTKLIB(卫星定位开源代码)环境

@RTKlib代码调试教程-Visual Studio 2019 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 ##RTKLIB-rtklib_2.4.3 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 @RTKlib代码调试教程-Visual Studio 2019 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技

qq_42209977的博客 4486

离散数学/初等数论:用“质因子分解法”和“欧几里得算法”求最大公约数gcd;“质因子分解法”和“最简算法”求最小公倍数lcm;以及对“意义”的一些看法。

离散数学/初等数论:用“质因子分解法”和“欧几里得算法”求最大公约数gcd;“质因子分解法”和“最简算法”求最小公倍数lcm;以及对“意义”的一些看法。

weixin_53730909的博客 1359

HSPICE用户必看:用Sigrity Broadband SPICE解决复杂封装建模的3个技巧

本文为HSPICE用户分享了三个使用Sigrity Broadband SPICE解决复杂封装建模难题的实战技巧。通过将宽频带S参数高效转换为时域SPICE模型,能显著提升仿真速度、保障收敛性,并精准分析谐振、返回路径不连续及超多端口PDN等关键问题,助力实现高效稳定的系统级信号与电源完整性分析。

metal的博客 600

专栏二十:如何选择你的单细胞亚群的分辨率--ROGUE

ROGUE这是继chooseR后第二个计算单细胞亚群分辨率的内容,其实关于代码的运行很简单,网上已经有不少教程,重复这些就没意思了,这里主要是结合探讨一下这个算法。

m0_58549466的博客 981

c语言用质因数分解法求最大公约数,分解质因数法求最大公约数(javascrip实现)

//判断是否为质数------------------------------------------------------function isPrime(n) {for (var i = n - 1; i > 1; i--) {if (n % i == 0) {return false;}}return true;}// -------------------------...

weixin_42151305的博客 1043

2、Minikube安装Ingress

文章目录前言一、Ingress安装二、Ingress Demo1.创建一个pod和service2.部署ingress3.添加minikube域名映射三、遇到的坑 前言 上篇介绍了Minikube的安装,本篇介绍一下如何在Minikube中安装Ingress。 一、Ingress安装 Ingress安装很简单,Minikube里面带了Ingress附件。 安装Ingress minikube addons enable ingress 禁用Ingress minikube addons disa

star_apple的博客 3071

辗转相除求最大公约数

辗转相除法求两个数的最大公约数(Greatest common divisor,GCD),在公元前300年前由欧几里得发现,被称为世界上最古老的算法。

jiguanglong的博客 449

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

acm新手小白必看系列之(6)——gcd与lcm精讲及例题(求最大公约数与最小公倍数)

acm新手小白必看系列之(6)——gcd与lcm精讲及例题 事前须知 % 求余符号; | 整除符号,a|b,表示a能整除b,即b=k*a(k为常数),或b%a==0; ≡ 同余符号,a≡b(mod c)为一个同余式,表示a%c=b%c; 取模运算的运算规则 (a + b) % p = (a % p + b % p) % p (a - b) % p = (a % ...

永恒之蓝的博客 2825

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

求两个数的最大公约数的四种方法

关于两个数的最大公约数的求法探究                                                            2016年9月12日 求最大公约数是一个很基本的问题,在一些数论题中也有广泛的应用~ 一些公司的面试题也会涉及这方面的知识,所以有必要好好掌握~ 解法一:辗转相除法 (1)递归 int gcd(int x,int y)//辗转相

algzjh的博客 2250

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

关于素数、唯一分解等内容的详细讲解(从属于GESP五级)

1.最小公倍数(Least Common Multiple)给定两个正整数 ,它们的公共倍数中最小的正整数称为它们的最小公倍数,记作。2.基本性质• (对称性)• 若 或 ,通常定义。

墨宸的博客 1440

Java算法之数论基础

更相减损法是中国古代数学家刘徽提出的求解最大公约数的方法,其原理是连续用较大数减去较小数,直至两数相等,此时的数即为两数的最大公约数。这个算法的关键在于通过不断替换较大的数为较小数和余数,使得每次迭代中,两个数的差值逐渐缩小,并最终找到它们的最大公约数。这里的绝对值符号仅是为了确保在 (a) 或 (b) 中有负数时仍能得出正确的结果,但由于最小公倍数定义应用于正整数,所以一般情况下 (a) 和 (b) 都是正数,因此实际上不需要取绝对值。的次方,即计算 (a^n) 的值。重复上述过程,直到a=b为止。

zzx0419_的博客 1548

最大公约数

求最大公约数的方法,辗转相除法。

Mopoke的博客 566

【算法学习笔记】数论算法(1) 基础数论概念、最大公约数、模运算

参考算导第31章 数论算法 文章目录欧几里得算法的扩展形式 4也 欧几里得算法的扩展形式 现在重写欧几里得算法、以计算出额外的有用信息。特别地,我们推广该算法用于计算出满 +4页 +4ye +4也 +7页 ...

memcpy0的博客 846
上一篇: wxpython 设置背景图片
下一篇: 黑客编程入门(二)
cassiePython
博客等级 码龄12年 303粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值