MATLAB实现求解最大公因子(欧几里得算法)

程序下载链接:https://download.csdn.net/download/m0_56241309/87457277

实验题目:欧几里得算法求解最大公因子

一、实验目的

实验环境: Windows 11操作系统;Matlab2019b

实现目标:欧几里得算法求解最大公因子;

实现交互界面;

实现关键步骤信息输出。

二、方案设计

1. 计算方案

  1. 欧几里得算法所依赖的定理为: gcd(a, b)=gcd(b, a-kb)=gcd(b,r)

  1. 即反复调用计算gcd,但是需要确保每一次计算之前进行模运算,将大的数字模上小的数字

  1. 得到模运算的结果后,再对两个数字使用gcd计算

  1. 以此类推,直至其中一个数字在模另一位数字得到0,余下的另一位非零整数即为二者的最大公因子

  1. 整体流程在算法上体现为递归运算,因此编写递归函数

2. 信息输出

  1. 设置信息输出函数,实现运算界面的信息输出

3. 交互界面

  1. 基于Matlab2019b中的mlapp编程实现

三、方案实现

1. 计算过程

介绍:递归函数gcd()

function results = gcd(app,a,b)
            ifb==0
                results=a;
            else
                results=app.gcd(b,mod(a,b));
            end
end

介绍:计算按钮EnButtom回调函数

function EnButtonPushed(app, event)
            ifapp.NUM1.Value==0&&app.NUM2.Value==0
                logRefresh_func(app,'请至少输入一个非零整数');
                return
            end
            
            m=app.NUM1.Value;
            n=app.NUM2.Value;
            app.CF.Value=app.gcd(m,n);
            app.logRefresh_func('求解成功')
            
end

2. 信息输出

介绍:加密界面信息输出函数logRefresh_func

function logRefresh_func(app,StrArrayNew)
            app.Ptime=datestr(now);
            app.LOG=strcat('[',app.Ptime(end-7:end),']');
            StrArrayNew=strcat(app.LOG,StrArrayNew);
            app.StrArray_En=[app.StrArray_En,StrArrayNew,newline];
            app.Process.Value=app.StrArray_En;
end    

3. 交互界面

Matlab2019b的mlapp开发环境

四、数据测试与分析

1. 数据测试

6与3的最大公因子3

8与6的最大公因子2

18与21的最大公因子3

1970与1066的最大公因子2

  1. 求解过程

  1. 求解演示

2. 分析

欧几里得算法求解最大公因子与我国古代的更相减损术一样,背后的定理可以描述为:gcd(a, b)=gcd(b, a-kb)=gcd(b,r),用于求解两个整数的最大公因子。算法本身就是一个递归的过程,在获取到两个整数后,对其使用某一函数,该函数检查两者中较大的数字在模另一位数字后是否为零,如果不为零,则将较大的数字用模运算后得到的结果替换,继续对两个数字使用该函数。这样一直递归下去,直至发现某一次模运算后得到的结果为0,此时可以确定两个数字的最大公因子为余下的非零整数。

五、总结

  • 欧几里得算法,即我国古代的更相减损术,用于求解两个数字的最大公因子

  • 该算法本身其实就是一个不断递归的过程,递归结束的条件为函数的输入中出现0时

  • 当某次运算结束出现了0时,则可以断定两数的最大共因此为此时的非零整数

  • 使用matlab实现欧几里得算法时,核心就在于编写递归函数。需要注意的是,函数需要在mlapp中被声明为全局可用

  • 在调用递归函数时,可以使用app.的前缀方式,也可以将app作为参数传入形参中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BumbleStone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值