基于欧几里德算法的使用

2016-02-19 10:06 4 1 收藏

下面图老师小编要跟大家分享基于欧几里德算法的使用,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - 编程语言 】

欧几里德算法称为辗转相除法,用来求已知m、n两个自然数的公因数。结合程序说明一下辗转相除的具体情况。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

首先看递归实现:
代码如下:

int getcd(int m,int n)
 {
     if (m 0 || n 0) {
         return 0;
     }
     if(m n)
     {
         int t = m;
         m = n;
         n = t;
     }
     if(m % n)
     {
         return getcd(n,(m % n));
     }
     else
     {
         return n;
     }
 }

主要计算过程分为三个步骤:

1、对输入的两个自然数m n取余数r,使得0= r n

2、如果r为0,n即为所求结果,直接返回

3、r不为0,则赋值m=n,n=r从步骤1开始重新执行

  两自然数的公因数的定义说明了计算结果产生的条件。如果步骤1中计算出的余数r = 0,则较小的数为公因数。如果r!=0则自然数m、n的关系可表示为:m = kn + r(其中k为自然数),等式可以证明能整除m的任何数必定能整除n和r;等式进一步可变形为:r = m - kn,说明同时整除m、n的任何数也必定能整除r。也就是说,能整除m、n的数的集合与整除n、r的数的集合相等。所以辗转相除的方法成立。
 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

再发布一个循环实现欧几里德算法的版本。
代码如下:

int getcd2(int m,int n)
 {
     if (m 0 || n 0) {
         return 0;
     }
     if(mn)
     {
         int t=m;
         m=n;
         n=t;
     }
     int cd = 1;
     while(1){
         int r = m % n;
         if(0==r)
         {
             cd = n;
             break;
         }
         else {
             m=n;
             n=r;
         }
     }
     return cd;
 }

来源:http://www.tulaoshi.com/n/20160219/1593348.html

延伸阅读
导入Jstl标签库 %@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"% 需要导入jstl.jar和standard.jar c:forEach -- 迭代标签迭代List或Map c:forEach var="person" items="${list}" ${person.name }/br /c:forEach c:foreach var="entry" items="${map }" 对map.entrySet()返回的set集合进行迭代 ${entry.key } : ${entr...
在android中,LayoutInflater有点类似于Activity的findViewById(id),不同的是LayoutInflater是用来找layout下的xml布局文件,并且实例化!而findViewById()是找具体xml下的具体 widget控件(如:Button,TextView等)。 下面通过一个例子进行详细说明: 1、在res/layout文件夹下,添加一个xml文件dialog.xml 代码如下: LinearLayout xmlns:an...
在Android平台中,集成了一个嵌入式关系型数据库-- SQLite ,它支持NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然只支持五种数据类型,实际上可以接受varchar(n),char(n),decimal(p,s)等数据类型,在进行运算或保存的时候会转换成对应的五种数据类型。 ex: 可以在Integer类型的字段中存放字符串,或者在布...
      最近在维护一个java工程,在群里面也就聊起来java的优劣!无奈一些Java的终极粉丝,总是号称性能已经不必C++差,并且很多标准类库都是大师级的人写的,如何如何稳定等等。索性就认真研究一番,他们给我的一项说明就是,在线程之间投递消息,用java已经封装好的BlockingQueue,就足够用了。    &...
1,什么是字符编码?     字符(Character)是文字与符号的总称,包括文字、图形符号、数学符号等。一组抽象字符的集合就是字符集(Charset)。字符集的出现是为了信息进行传播储存提供方便。目前常用到字符集有:ASCII,ISO 8859-1,Unicode,GB2312 2,各种编码集有哪些特点? ASCII:     ASCII(Ameri...

经验教程

729

收藏

67
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部