基于欧几里德算法的使用

心匪铁不可转

心匪铁不可转

2016-02-19 10:06

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

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

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

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;
     }
 }

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

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

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的数的集合相等。所以辗转相除的方法成立。
 

(本文来源于图老师网站,更多请访问https://m.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;
 }

展开更多 50%)
分享

猜你喜欢

基于欧几里德算法的使用

编程语言 网络编程
基于欧几里德算法的使用

基于Java的IDEA加密算法

Java JAVA基础
基于Java的IDEA加密算法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

基于稀疏图上的Johnson算法的详解

编程语言 网络编程
基于稀疏图上的Johnson算法的详解

基于Java的IDEA加密算法探讨

编程语言 网络编程
基于Java的IDEA加密算法探讨

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

学习基于SQL数据库的算法

编程语言 网络编程
学习基于SQL数据库的算法

Java中 shuffle 算法的使用

编程语言 网络编程
Java中 shuffle 算法的使用

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

聚美优品301现金券的使用规则是什么

聚美优品301现金券的使用规则是什么

超级简单的图片防盗(HTML),好用

超级简单的图片防盗(HTML),好用
下拉加载更多内容 ↓