求最大公约数的三种方法

一、最大公约数与最小公倍数

最大公约数,属于数论所探究的内容。

最大公约数可以通过下面的三种方法求出来。

最小公倍数呢,它与最大公约数的乘机为所求数之积。

比如求  x,y的最大公约数和最小公倍数

记住这个公式: x*y=最小公倍数*最大公约数

二、求最大公约数的三种方法

①辗转相除法

算法流程图

int measure(int x, int y)

{

int z = y;

while(x%y!=0)

{

z = x%y;

x = y;

y = z;

}

return z;

}

运行结果:

②辗转相减法

int measure(int a,int b)

{

while(a != b)

{

if(a>b)

{

a = a - b;

}

else

{

b = b - a;

}

}

return a;

}

运行结果:

③穷举法

流程图

int measure(int x,int y)

{

int temp = 0;

for(temp = x ; ; temp-- )

{

if(x%temp == 0 && y%temp==0)

break;

}

return temp;

}

原文地址:https://www.cnblogs.com/schips/p/10658253.html

时间: 2024-10-11 12:02:36

求最大公约数的三种方法的相关文章

求Fibonacci数的三种方法和时间复杂度解析

题目: 定义Fibonacci数列如下: f(0)=1 f(1)=1 f(n)=f(n-1)+f(n-2), n>=2 输入n,用最快的方法求该数列的第n项. 解答一: 直接用公式写递归函数.很简单,很低效,就不写了.时间复杂度T(N) = T(N-1) + T(N-2); 也是f(n)本身,2^(n/2)<f(n)<2^n. 解答二: 用循环求,也很直接,效率很高了,时间复杂度是O(n). int f(int n) { if(n <= 1) return 1; int f0=1,

求字符串长度的三种方法

1.指针 #include<stdio.h> int strlen(char s[]) {     int len=0; while(*s++!='\0') {       len++; } return len; } int main() { char s[]="123456789"; printf("%d\n",strlen(s)); system("pause");    return 0; } 2.计数 #include<

js求最大公约数的两种方法

1.辗转相除法 function commonDivisor1(num1,num2) { if ((num1-num2) < 0) { var k = num1; num1 = num2; num2 = k; } while (num2 !=0) { var remainder = num1%num2; num1 = num2; num2 = remainder; } return num1; } 2.更相减损法 function commonDivisor2(num1,num2) { var

求一个数的最大公约数的三种思路——解题笔记

求一个数的最大公约数的三种思路--解题笔记 编程之美上的题目:求一个数的最大公约数. 这道题目有三种解题思路,总结如下: 思路一: 直接使用辗转相除法,这个不多介绍,代码如下: // 直接辗转相除法 int gcd1(int a, int b) { for(int m = a%b; m != 0; m = a%b) { a = b; b = m; } return b; } 分析:辗转相除法需要用到数值之间的取余运算,这是非常耗时间的. 思路二: 改进辗转相除法中取余(除法)运算,改为减法.这里

求字符串长度函数实现的三种方法

/* Date: 10/03/19 12:49 Description: 求字符串长度函数实现的三种方法*/ #include<stdio.h> int strlen1(char *s);int strlen2(char *s);int strlen3(char *s); int main(void) { char str[]="The function to test my length."; printf("The length1 is:%d\n",

C语言编程 求两个数的平均值方法(三种方法)

第一种方法是最常见的average=(a + b) / 2这种方式,求两个数的平均值 第二种方法是当 a<b 时averag=a+(b-a)/2 这里着重介绍的是第三种方法 average=(a&b) + (a^b)>>1 推导过程如下a + b = (a&b) 2 + (a^b)) --->average=((a&b)2+(a^b))/2 ---->average=(a&b) + (a^b)>>1 eg:两个数为15和515二进制

求乘法逆元的几种方法

(数学渣,下面的文字可能有误,欢迎指教)乘法逆元的定义貌似是基于群给出的,比较简单地理解,可以说是倒数的概念的推广.记a的关于模p的逆元为a^-1,则a^-1满足aa^-1≡ 1(mod p) 加减乘与模运算的顺序交换不会影响结果,但是除法不行.有的题目要求结果mod一个大质数,如果原本的结果中有除法,比如除以a,那就可以乘以a的逆元替代. 在mod p的运算中,a存在乘法逆元当且仅当a与p互质.一般题目给的是一个大质数,所以只要a不是p的倍数,就以求乘法逆元. 目前了解到的求法有三种:1.扩展

mysql分表的三种方法

mysql分表的3种方法 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. 根据个人经验,mysql执行一个sql的过程如下:1,接收到sql;2,把sql放到排队队列中 ;3,执行sql;4,返回执行结果.在这个执行过程中最花时间在什么地方呢?第一,是排队等待的时间,第二,sql的执行时间.其实这二个是一回事,等待的同时,肯定有sql在执行.所以我们要缩短sql的执行

C语言--求字符串长度的三种解法

问题: 求一个字符串的三种解法 一.计数的方法 #include<stdio.h> #include<assert.h> int my_strlen( char* str) { int count=0; while (*str) { count++; str++; } return count; } int main(void) { char *arr = "abcef"; int ret = my_strlen(arr); printf("%d\n&