C实现辗转相除法求两个数的最大公约数
什么是辗转相除法?
辗转相除法(又名欧几里德算法),它主要用于求两个正整数的最大公约数。是已知的最古老的算法。
用辗转相除法求132和72的最大公约数的步骤:
132 / 72 = 1 ... 60
72 / 60 = 1 ... 12
60 / 12 = 5
所以他们的最大公约数就是12。
如何实现辗转相除法?
我们把要求的两个数定为a和b(a > b)。
首先算1.a / b = c ... r
接着2.a = b, b = r,并判断r是否是0。若不为零则重复1,若为0则输出除数,也就是b。
但是,仔细一想,b = r,r = 0,输出的结果总是0,所以我们要找到原来的b,就是a,所以正确的应该是输出a。
这是经过重复修改后的伪代码:
while(b ≠ 0){
r = a mod b;
a = b;
b = r;
if(r == 0) break and show a;
}
完整的程序代码:
#include <stdio.h>
#include <stdlib.h> int fun(int, int); int main(int argc,char *argv[])
{
int a,b,n;
printf("请输入两个数:");
scanf("%d%d",&a,&b);
if( (a <= ) || (b <= ) ){ //数据检查
printf("除数不能为0");
return ;}
n = ( a > b ? fun(a,b) : fun(b,a) ); //调用函数并处理大小顺序
printf("最大公因数:%d",n);
getch();
return ;
} int fun(int a,int b)
{
int r;
while(b){ //因为b的初值不为0,所以循环有效。当b=0时,余数r=0,循环终止。
r = a % b; //取余数
a = b; //除数作被除数
b = r; //商作除数
}
return a; //a就是最后的除数
}
C实现辗转相除法求两个数的最大公约数的更多相关文章
- C++中用辗转相除法求两个数的最大公约数和最小公倍数
两个数的最大公约数:不能大于两个数中的最小值,算法口诀:小的给大的,余数给小的,整除返回小的,即最大公约数,(res=max%min)==0? max=min,min=res return min; ...
- C语言辗转相除法求2个数的最小公约数
辗转相除法最大的用途就是用来求两个数的最大公约数. 用(a,b)来表示a和b的最大公约数. 有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c). (证明过程请参考其它资料) 例 ...
- 求两个数的最大公约数&求N个数的最大公约数
一.求两个数的最大公约数 如何编程计算N个数的最大公约数(Greatest common divisor)呢?第一想法那便是两两计算,但是往往最简单的想法是不怎么靠谱的.下面用递归来解决.递归有一大好 ...
- c语言实践:求两个数的最大公约数
我的思路是这样的:比如12和16这两个数.先理解一下概念,什么叫最大公约数.就是12有很多个因数,16也有很多个因数,这两堆因数中有一些重合的因数,在这些重合的因数中找到那个最大的.那么最大公约数一定 ...
- python 函数求两个数的最大公约数和最小公倍数
1. 求最小公倍数的算法: 最小公倍数 = 两个整数的乘积 / 最大公约数 所以我们首先要求出两个整数的最大公约数, 求两个数的最大公约数思路如下: 2. 求最大公约数算法: 1. 整数A对整数 ...
- 求两个数的最大公约数(Euclid算法)
求两个数 p 和 q 的最大公约数(greatest common divisor,gcd),利用性质 如果 p > q, p 和 q 的最大公约数 = q 和 (p % q)的最大公约数. 证 ...
- C++扬帆远航——14(求两个数的最大公约数)
/* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:gongyueshu.cpp * 作者:常轩 * 微信公众号:W ...
- Java数据结构与算法之---求两个数的最大公约数(欧几里得算法)
一个简单的小算法来获取两个数的最大公约数, public class Test { public static void main(String[] args) { long result = gcd ...
- 使用辗转相除法求两个数的最大公因数(python实现)
数学背景: 整除的定义: 任给两个整数a,b,其中b≠0,如果存在一个整数q使得等式 a = bq 成立,我们就说是b整除 ...
随机推荐
- 我的Python基础笔记
Python是从刚开始参加工作,就有听各方面的测试大牛推崇,但是刚开始做测试时还是把基础的测试方法放在第一位来学习的,直到半年多以后才开始接触Python. 我的Python基础主要是以廖雪峰老师的在 ...
- 搭建Artifactory集群
搭建Artifactory集群 制品仓库系统有很多,例如Artifactory.Archiva.Sonatype Nexus.Eclipse Package Drone,其中Artifactory拥有 ...
- 慕课网-安卓工程师初养成-4-12 Java循环跳转语句之 continue
来源:http://www.imooc.com/code/1432 continue 的作用是跳过循环体中剩余的语句执行下一次循环. 例如,打印 1--10 之间所有的偶数,使用 continue 语 ...
- EXCEL数据透视图操作方式
1.先圈住要做视图的区域,如图1 2.插入——>数据透视表,点下拉小标识,选择数据透视图(注,可能此功能没有,右键工具栏空白->自定义快速访问工具-->所有-->按下S 找到视 ...
- 操作系统是怎么工作的——函数的堆栈框架/嵌入式代码
1.函数堆栈框架 1.1框架模型 call指令: 1)将eip中的下一条指令的地址A保存在栈顶: 2)设置eip指向被调用程序的代码处. ret指令:将地址A恢复到eip中 这样就将函数的调用变为顺序 ...
- SQL函数——LENGTH()和LENGTHB()
LENGTH()函数是比较简单同时也是非常有用的一个函数,在此小记一下,加深印象以备后用! 1:先上实验的例子——我新建了一张Student表,插入了若干条测试数据,如下图所示: 2:实验LENGTH ...
- 25_android下文件访问的权限
写文件:FileOutputStream fos = 上下文.openFileOutput("private.txt",Context.MODE_PRIVATR);参数1 文件名, ...
- java中sesion
Session *Cookie基于客户端,不安全,并且大小和个数的限制. *Session域对象,范围一次会话范围,存个人相关的数据. *setAttribute(String ...
- AX函数,将EXCEL列号转为列名
str GetExcelColName( int i_col) { int j; str ret; int v_div,v_mod; str tmp1,tmp2; int i_col_ascii; ; ...
- hbase很有价值的读写性能提升
NoSQL现在风生水起,hbase的使用也越来越广,但目前几乎所有的NoSQL产品在运维上都没法和DB相提并论,在这篇blog中来总结下我们在运维hbase时的一些问题以及解决的方法,也希望得到更多h ...