博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求最大公约数算法
阅读量:5241 次
发布时间:2019-06-14

本文共 1909 字,大约阅读时间需要 6 分钟。

#include
#include
int max_approximate(int num1, int num2){ if (num1 > num2) { int tmp = 0; tmp = num1; num1 = num2; num2 = tmp; } int min = num1; while (min) { if ((num2%min == 0)&&(num1%min==0)) { return min; } min--; } return 1;}int main(){ int num1 = 0; int num2 = 0; int ret = 0; scanf("%d%d", &num1,&num2); ret=max_approximate(num1, num2); printf("%d\n", ret); system("pause"); return 0;}

//辗转相除

int max_approximate(int num1, int num2)

{

    if (num1 > num2)

   {

     int tmp = 0;tmp = num1;

     num1 = num2;num2 = tmp;

   }

int r = num2%num1;

while (r != 0)

{

num2 = num1;

num1 = r;r = num2%num1;

}

return num1;

}

int main()

{

int num1 = 0;

int num2 = 0;

int ret = 0;

scanf("%d%d", &num1, &num2);

ret = max_approximate(num1, num2);

printf("%d\n", ret);system("pause");

return 0;

}

//更相减损法:

int max_approximate(int num1, int num2)

{

if (num1 > num2)

{

int tmp = 0;

tmp = num1;

num1 = num2;

num2 = tmp;

}

int r = num2-num1;

while (r != num1)

{if (num1>r)

{

num2 = num1;

num1 = r;

}

else

{

num2 = r;

}

r = num2-num1;

}

return num1;

}

int main()

{

int num1 = 0;

int num2 = 0;

int ret = 0;

scanf("%d%d", &num1, &num2);

ret = max_approximate(num1, num2);

printf("%d\n", ret);

system("pause");

return 0;

}

 

1.辗转相除法
算法:就是用大数除小数,如果余数不是零,就把余数和较小的数构成一组新数,继续上面的除法,知道大数被小数约尽,此时比较小的数就是最大公约数
2. 更相减损法:
更相减损术,是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。
       《九章算术》是中国古代的数学专著,其中的“更相减损术”可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”
翻译成现代语言如下:
第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。
其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法。所以更相减损法也叫等值算法。

   3. 辗转相除法与更相减损术的区别
(1)都是求最大公因数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显。
(2)从结果体现形式来看,辗转相除法体现结果是以相除余数为0则得到,而更相减损术则以减数与差相等而得到
4.个数的最大公约数与最小公倍数的乘积就是这两个数的乘积,可以转化求最小公倍数。

转载于:https://www.cnblogs.com/Sunnylunch/p/5483139.html

你可能感兴趣的文章
12.4站立会议
查看>>
Java Concurrentmodificationexception异常原因和解决方法
查看>>
客户端访问浏览器的流程
查看>>
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>
c++||template
查看>>
[BZOJ 5323][Jxoi2018]游戏
查看>>
编程面试的10大算法概念汇总
查看>>
Vue
查看>>
python-三级菜单和购物车程序
查看>>
条件断点 符号断点
查看>>
VMware12 + Ubuntu16.04 虚拟磁盘扩容
查看>>
水平垂直居中
查看>>
MySQL简介
查看>>
设计模式之桥接模式(Bridge)
查看>>
jquery的$(document).ready()和onload的加载顺序
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
【codevs1033】 蚯蚓的游戏问题
查看>>
【程序执行原理】
查看>>
python的多行注释
查看>>