欧几里得算法

文章目录

  • 欧几里得算法介绍
  • 欧几里得算法的证明
    • 证明1:b和a%b的最大公约数,也是a和b的公约数
    • 证明2:b和a%b的最大公约数,也是a和b的最大公约数

欧几里得算法介绍

小学或初中时学过辗转相除法,用于求两个数的最大公约数。

欧几里得算法就是利用辗转相除法求最大公约数。

整数 a, b 的最大公约数一般表示为 gcd(a, b)。其中a > b。

欧几里得算法: gcd(a, b) = gcd(b, a%b)。

欧几里得算法实质上式将较大规模的问题转化为较小规模的问题 (因为a%b < b < a)。

利用欧几里得算法递归调用,最终问题变得越来越简单,直到gcd(b, a%b) 中的 a%b == 0, 此时最大公约数即为b。

欧几里得算法的证明

证明过程我们分两步:

证明1: b和a%b的最大公约数,也是a和b的公约数

证明2:b和a%b的最大公约数,也是a和b的最大公约数

以下分别介绍:

证明1:b和a%b的最大公约数,也是a和b的公约数

设b和a%b的最大公约数为c, 则有:
b = k 1 ∗ c \begin{align} b = k_1 * c \end{align} b=k1c
a % b = k 2 ∗ c \begin{align} a \% b = k_2 * c \end{align} a%b=k2c
考虑 a % b a\%b a%b的含义,实际上可以写成a减去若干个b, 即

a % b = a − k ∗ b = k 2 ∗ c \begin{align} a \% b &= a - k*b \\&= k_2 * c \end{align} a%b=akb=k2c

所以
a = k ∗ b + k 2 ∗ c = k ∗ k 1 ∗ c + k 2 ∗ c \begin{align} a &= k*b + k_2 * c \\ &= k * k_1 * c + k_2 * c \end{align} a=kb+k2c=kk1c+k2c

所以无论是a的表达式还是b的表达式中,都有c这个数,所以c也是a和b的公约数。

证毕。

证明2:b和a%b的最大公约数,也是a和b的最大公约数

由证明1的结论可知,若c为b和a%b的最大公约数, 那么a和b可以分别表示为:

a = ( k ∗ k 1 + k 2 ) ∗ c \begin{align} a = (k * k_1 + k_2) * c\end{align} a=(kk1+k2)c
b = k 1 ∗ c \begin{align} b = k_1 * c\end{align} b=k1c

现在需要证明 两个因数 k ∗ k 1 + k 2 k*k_1+k_2 kk1+k2 k 1 k1 k1 的最大公约数为1 (证明2的等价条件).

我们可以用反证法来证明。

假设 g c d ( k ∗ k 1 + k 2 , k 1 ) = d , d > 1 gcd(k*k_1 + k_2, k_1) = d, d > 1 gcd(kk1+k2,k1)=d,d>1 , 那么就有

k ∗ k 1 + k 2 = m ∗ d \begin{align}k * k_1 +k_2= m*d\end{align} kk1+k2=md
k 1 = n ∗ d \begin{align}k_1 = n * d\end{align} k1=nd
由以上两个式子可以表示出 k 2 k2 k2:
k 2 = m ∗ d − k ∗ k 1 \begin{align}k_2 = m*d - k * k_1\end{align} k2=mdkk1

带入(1)式和(2)式:
b = k 1 ∗ c = n ∗ d ∗ c \begin{align}b &= k_1 * c \\&= n * d * c\end{align} b=k1c=ndc
a % b = k 2 ∗ c = ( m ∗ d − k ∗ k 1 ) ∗ c = ( m ∗ d − k ∗ n ∗ d ) ∗ c = d ∗ c ∗ ( m − k ∗ n ) \begin{align}a \% b &= k_2 * c \\&= (m * d - k * k_1) * c \\&= (m * d - k * n * d) * c \\&= d * c * (m - k * n)\end{align} a%b=k2c=(mdkk1)c=(mdknd)c=dc(mkn)
因此就找到了 b b b a % b a \% b a%b 的一个公约数 d ∗ c > c d * c > c dc>c, 这和c是二者的最大公约数矛盾。

因此反证法的假设不成立, g c d ( k ∗ k 1 + k 2 , k 1 ) = 1 gcd(k*k_1 + k_2, k_1) = 1 gcd(kk1+k2,k1)=1, 即 c也是a和b的最大公约数。

证毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

引领汽车营销新趋势,3DCAT实时云渲染助力汽车三维可视化

当前&#xff0c;汽车产业发展正从电动化的上半场&#xff0c;向智能化的下半场迈进。除了车机技术体验的智能化之外&#xff0c;观车体验的智能化也不容忽视。 这是因为&#xff0c;随着数字化、智能化、个性化的趋势&#xff0c;消费者对汽车的需求和期待也越来越高&#xf…

CSS overflow-anchor

overflow-anchor 为了认识这个属性, 我们需要先看一种常见的现象. 即在网页加载中, 图片常常比文字加载更慢, 这样图片加载完成后可能会将文字向下顶. 比如下图演示 <div class"overflow"><img id"bg" src"" height"150" al…

【NI-RIO入门】使用其他文本语言开发CompactRIO

1.FPGA 接口Python API Getting Started — FPGA Interface Python API 19.0.0 documentation 2.FPGA接口C API FPGA 接口 C API 是用于 NI 可重配置 I/O (RIO) 硬件&#xff08;例如 NI CompactRIO、NI Single-Board RIO、NI 以太网 RIO、NI FlexRIO、NI R 系列多功能 RIO 和…

STM32的以太网外设+PHY(LAN8720)使用详解(7):以太网数据接收及发送测试

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册 4.Wireshark1 以太网数据接收测试 1.1 以太网数据接收测试&#xff08;轮询&#xff09; 我们在主循环内轮询RX DMA描述符标志位查看是否接收到了数据&#xff0c;如果接收到了则将数据…

CSS3 面试题

CSS3 面试题 CSS3 是什么&#xff1f;它与 CSS 的关系是什么&#xff1f; CSS3 是 Cascading Style Sheets&#xff08;层叠样式表&#xff09;的第三个版本&#xff0c;它引入了许多新特性和增强功能&#xff0c;用于美化和布局网页。CSS3 是 CSS 的升级版本&#xff0c;扩展了…

校园助手示例安卓、ios基于Flutter,小程序基于mpvue,前端基于VueJS,后端Flask(附源码)

warning master分支正在经历大量的重写&#xff0c;请至v4分支查看可运行的版本。 <div align"center"> <img src"logo.png" width "200" height "200" alt"SHUhelper" aligncenter /> <h3>SHUh…

网络通信--深入理解网络和TCP / IP协议

计算机网络体系结构 TCP/IP协议族 TCP / IP 网络传输中的数据术语 网络通信中的地址和端口 window端查看IP地址和MAC地址&#xff1a;ipconfig -all MAC层地址是在数据链路层的&#xff1b;IP工作在网络层的 MAC是48个字节&#xff0c;IP是32个字节 在子网&#xff08;局域…

【已解决】Spring data jpa的@query的传入参数是对象怎么匹配参数

我们知道&#xff0c;在使用JPA的时候&#xff0c;如果参数是一个一个的话&#xff0c;有两种方式匹配 ①&#xff1a;根据位置匹配。如下&#xff1a; Query(value "SELECT * FROM employee WHERE c_id?1 and id?2", nativeQuery true) EmployeeEntity getUni…

Ubuntu 常用命令之 scp 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 SCP&#xff08;Secure Copy&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;的文件传输协议&#xff0c;它可以在本地和远程主机之间安全地复制文件。在Ubuntu系统下&#xff0c;我们可以使用scp命令来实现这个功…

java-sec-code中rmi

java-sec-code中rmi 暂时没有搞懂原理&#xff0c;这里只说明利用方法 java-sec-code 作者给出的是使用ysoserial进行利用 测试环境搭建 docker环境下&#xff0c;1099端口默认不开启&#xff0c;这里使用idea运行org.joychou.RMI.Server即可 个人电脑java环境分为1.8.381 1.8.…

Spring核心源码解析

Spring 框架核心源码 1、使用 Spring 框架 2、反射机制 IoC 控制反转 Inverse of Control 创建对象的权限&#xff0c;Java 程序中需要用到的对象不再由程序员自己创建&#xff0c;而是交给 IoC 容器来创建。 IoC 核心思想 1、pom.xml <dependencies><!-- 引入 …

38.常用shell之 jobs - 列出后台作业 的用法及衍生用法

jobs 是一个在类 Unix 系统的 shell&#xff08;如 bash&#xff09;中常用的命令&#xff0c;用于列出当前 shell 会话中的后台作业。一个“后台作业”是指在后台运行的进程&#xff0c;即它在没有占用终端的情况下执行。以下是 jobs 命令的基本用法和一些衍生用法&#xff1a…

html基础2

视频video <video src"视频的路径"controls"控制播放、暂停、音量等"autoplay"自动播放"loop"循环播放"width"视频播放器的宽度"height"视频播放器的高度"> </video>还有做浏览器兼容的方式&#xf…

pytorch张量的创建

张量的创建 张量&#xff08;Tensors&#xff09;类似于NumPy的ndarrays &#xff0c;但张量可以在GPU上进行计算。从本质上来说&#xff0c;PyTorch是一个处理张量的库。一个张量是一个数字、向量、矩阵或任何n维数组。 import torch import numpy torch.manual_seed(7) # 固…

04-基于GEC6818开发板的触摸实现——电子相册实例

基于GEC6818开发板的触摸实现——电子相册 本文主要涉及GEC6818开发板实现对触摸屏的相关操作&#xff0c;可以识别上下左右的滑动&#xff0c;通过滑动来进行图片的切换——电子相册。 其他相关GEC6818开发板的内容可以参考&#xff1a; 01-基于粤嵌GEC6818实现屏幕的显示固定…

一步一步写线程之二线程应用管理

一、多线程使用 多线程在实际的应用中非常广泛&#xff0c;它在实际应用中遇到的主要的问题有以下几类&#xff1a; 1、线程自身的控制 线程自身的控制包括&#xff1a;线程结束控制&#xff08;join/detach&#xff09;&#xff0c;所有权控制和数量选择。 2、线程的传参 线程…

docker学习(十五、Dockerfile之python示例)

文章目录 一、python的Dockerfile二、Dockerfile分析总结 一、python的Dockerfile # 使用官方的 Python 作为基础镜像 FROM python:3.8# 将工作目录设置为 /app WORKDIR /app# 将当前目录下的所有文件复制到工作目录 /app 下 COPY . /app# 安装所需的依赖库 RUN pip install -r…

机器学习-数学学习汇总

***I数学只是一个工具&#xff0c;会使用&#xff0c;能解决问题就可以了&#xff0c;精确例如到3.14够用就可以了*** 微积分作用&#xff1a;解决非线性问题 学习&#xff1a;27分。 高中数学&#xff1a; 1.高中数学所有知识点表格总结&#xff0c;高中知识点一个不漏&am…

RLHF对LLM泛化性和多样性的影响

paper&#xff1a;Understanding the effects of RLHF on LLM generalisation and diversity 0 背景知识 标准的RLHF finetuning pipeline一般包含3个阶段&#xff1a; supervised fine-tuning (SFT)。对预训练的模型进行用language modeling的方式进行微调。reward modelin…

C++ 之函数重写

在C中&#xff0c;函数重写&#xff08;Function Overriding&#xff09;是一种面向对象编程的概念&#xff0c;它允许派生类重新定义基类中已经定义的虚函数。函数重写用于实现多态性&#xff0c;使得程序能够在运行时选择调用哪个版本的函数&#xff0c;以便适应不同的对象类…