【C语言】辗转相除法+更相减损术+秦九韶算法
一、辗转相除法
1、简介
辗转相除法又叫欧几里得算法。
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
2、代码
#include<stdio.h>int gcd(int a, int b) {int t;while(b!=0) {t=a%b;a=b;b=t;}return a;
}
二、更相减损术
1、简介
更相减损术是出自《九章算术》的一种求最大公约数的算法。
求98与63的最大公约数:
98-63=35
63-35=28
35-28=7
28-7=21
21-7=14
14-7=7
所以,98和63的最大公约数等于7。
2、代码
#include<stdio.h>int gcd(int a, int b) {while (a != b) {if (a > b)a = a - b;elseb = b - a;}return b;
}
三、秦九韶算法
1、简介
秦九韶算法是中国南宋时期的数学家秦九韶提出的一种多项式算法。
在西方被称作霍纳算法。
一般地,一元n次多项式的求值需要经过(n+1)*n/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法。
2、算法描述
- 用一个数组去描述该多项式,数组的最大下标就是最大幂,下标对应的值就是对应的系数
- 输入多项式信息,x的值和各系数(看作是的系数)
- 以加法为连接点
3、代码
#include<stdio.h>/*秦九韶算法*/
int Qinjiushao(int x,int*a,int n)//x x的值 *a 包含系数信息的数组 n 最高幂+1
{int result = a[n-1];for(int i=n-2;i>=0;i--)result = x*result+a[i];return result;
}int main()
{int x,n;printf("x的值:\n");scanf("%d",&x);printf("最高幂:\n");scanf("%d",&n);int a[n];for(int i=0;i<n+1;i++){printf("系数%d:\n",i);scanf("%d",&a[i]);}printf("由秦九韶算法得出结果:%d",Qinjiushao(x,a,n+1));
}
4、举例说明
求的值
【C语言】辗转相除法+更相减损术+秦九韶算法相关推荐
- 初等数论--整除--欧几里得算法/辗转相除法/更相减损术
初等数论--整除--欧几里得算法/辗转相除法/更相减损术 欧几里得算法/辗转相除法/更相减损术 博主本人是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找 ...
- C语言 用更相减损术求最大公约数,最小公倍数
更相减损术 更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合. 出处 <九章算术> 用途 求最大公约数 作用 ...
- 【原创】更相减损术 stein算法 欧几里得算法 拓展欧几里得算法 扩展欧几里得算法 逆元的计算与筛法 解模线性方程
欧几里得 说在前面 数论学复习 Part 6. 然后再来一章CRT和组合数,就飞往概率,以此为跳板去向DP. 计划很美啊你. P.S. 这么说来拉格朗日插值可以说是数论学复习的Part 0了啊. 有一 ...
- 求最大公约数与最小公倍数 (辗转相除法+更相减损法+Stein算法)
辗转相除法与更相减损法对比: (1)两者都是求最大公因数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显 ...
- 更相减损术程序设计c语言,更相减损术
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合 ...
- C++算法:辗转相除法与更相减损术
辗转相除法与更相减损术 1.我们已经学过求最大公因数的知识,你能求出18与30的公因数吗? 2.如果公因数比较大而且根据我们的观察又不能得到一些公因数,我们又应该怎样求它们的最大公因数?比如求8251 ...
- 更相减损术——Java实现
Java作业--求最大公约数--更相减损术 虽然算法简单,但是因为很不熟练,所以一开始的代码有较多错误,以下是经过多次修改后的代码. 代码: import java.util.Scanner;publ ...
- c语言碾转相除法,从高中碾转相除法、更相减损术算法谈起
编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」 先问你们一个小学问题:「如何求两个整数的最大公约数?」 曾经见过不少的算法题,发现有的并不在数据 ...
- 求最大公约数和最小公倍数——辗转相除法(欧几里得算法)、更相减损术、stein算法
辗转相除法-- 辗转相除法求最大公约数的原理: 两个整数其中较小的数 和 两数相除(较大数除较小数)的余数(使用递归)的最大公约数. 辗转相除法求最小公倍数的原理: 两个整数分别除以最大公约数的结果相 ...
最新文章
- RNN,LSTM,GRU简单图解:
- Sparkmllib scala线性回归
- Unity(四)IocContainer 封装类库
- Android之tint图片着色器
- 老板:再用Log4j就收拾东西回家吧!
- 一个“想忘带东西都难”的出行指南
- arm平台下的反汇编pdf_stm32逆向与安全科普,bin文件逆向反汇编
- 一个websocket 可以多个页面创建吗_聊聊 WebSocket,还有 HTTP
- Hadoop安装教程(Hadoop3.3.1版本),centos7系统,避免踩坑
- 易语言窗口c_句柄取进程名,通过进程名取窗口句柄
- BZOJ 3669 luogu 2387 魔法森林
- phpstudy8.1安装duxcms3.1.3
- Kubernetes — 使用 kubeadm 部署高可用集群
- vivo7.0系统手机最完美激活Xposed框架的教程
- 异硫氰酸荧光素(FITC)标记的抗人IL-1ra单克隆抗体,FITC-IL-1ra
- Python定时任务推送微信消息
- 187、商城业务-检索服务-页面排序功能
- 24.线程系列- google提供的一些好用的并发工具类
- 教师计算机提升返岗总结,语文老师返岗研修心得体会
- 为bib文件中文参考文献的key域添加排序用拼音