今天来讲讲最大公因数的几种求法,最近老遇到这个问题

今天来讲讲最大公因数的几种求法,最近老遇到这个问题在这里描述函数接口

大家好,欢迎来到IT知识分享网。

方法一:辗转相除法

原理很聪明也很简单,假设要求两个数x,y(x<y),的最大公因数,那么先判断y%x==0;如果不等于0,令y=x,x=y%x就用较小的x除以y%x的值,一直到y%x==0,所得x即为所求;

那么c语言如何实现这一过程呢

先看看如何用函数实现

使用递归函数实现辗转相除法求两正整数的最大公约数,调用该函数后,返回两正数的最大公约数。

函数接口定义:


在这里描述函数接口。例如: int gcd(int a,int b);

在这里解释接口参数。例如:其中 a 和 b 都是用户传入的参数,保证传入的参数为正数。 函数须返回 a 和 b 的最大公约数。

裁判测试程序样例:


在这里给出函数被调用进行测试的例子。例如: #include <stdio.h> int gcd(int a,int b); int main() { int a,b; scanf("%d %d",&a,&b); printf("%d 和 %d 的最大公约数为: %d",a,b,gcd(a,b)); } /* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

18 45 

输出样例:

在这里给出相应的输出。例如:

18 和 45 的最大公约数为: 9
#include<stdio.h> int gcd(int m,int n) { if(n%m==0) return m; else return gcd(n%m,m);/让余数和较小数成为不断使用用的数/ }

 再看看如何不用函数实现这一过程

本题目要求读入2个正整数A和B,然后输出它们的最大公约数和最小公倍数。

输入格式:

输入在一行中给出2个不超过10000的正整数A和B。

输出格式:

对每一组输入,在一行中输出最大公约数和最小公倍数,用逗号分隔。

输入样例:

2 3 

输出样例:

1,6
#include<stdio.h> int main() { int A,B,m,a,b,n; scanf("%d %d",&A,&B); m=A; if(A>B) { A=B; B=m; } /这里交换AB,以保证A小B大/ b=B%A; /余数为b/ a=A; /较小数为a/ while(b>0) { n=b; b=a%n; /较小数除以余数/ a=n; } printf("%d,%d",n,A*B/n); /最大公倍数就是两个数的乘积除以最大公约数/ }

 方法二:质因数分解法

质因数分解法:把每个数分别分解质成因数,然后找出相同的质因数,最后将这些相同的质因数相乘得到最大公约数。例如:

已知两个数分别为24和36,将它们分别进行质因数分解:

24=2×2×2×3

36=2×2×3×3

可以看出,两个数的最大公因数为:

2×2×3=12

因此,24和36的最大公约数为12。

输入一个正整数n,如果n为合数除了1和本身,还有因数的称为合数),将n进行质因数分解。例如,输入100,输出2、2、5、5,当输入不为合数时,输出error

输入格式:

请在这里写输入格式。例如:输入一个正整数n。

输出格式:

请在这里描述输出格式。例如:当 n 为合数时,输出所有因数 ; 当n 为质数时,输出error。

输入样例:

在这里给出一组输入。例如:

100 

输出样例:

在这里给出相应的输出。例如:

2 2 5 5 

 

#include<stdio.h> int main() { int n,i,f; scanf("%d",&n); f=n; for(i=2;i<n;i++) { while(f%i==0) { printf("%d ",i); f=f/i; } } if(f==n) printf("error"); }

 这个代码可以找出他的质因数,我们可以稍作加工就可以找出他们共有的质因数,进而求出最大公约数。

方法三:短除法

短除法:在求两个数的最大公约数时,如果无法进行质因数分解,可以采用短除法。短除法的步骤如下:将除数除以被除数得到商,然后用除数除以商得到余数,再用余数去除除数,如此反复,直到余数为零为止。最后将所有的除数相乘,得到的积即为最大公约数。例如:

已知两个数分别为18和24,可以使用短除法求解最大公约数:

18÷2=9

24÷2=12

9÷3=3

12÷3=4

2×3=6

因此,18和24的最大公约数为6。

这个方法与质因数分解法极为相似,而且大家最早接触的就是这种方法,因此较好理解,就不多解释了。

欢迎大家积极留言!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/155437.html

(0)
上一篇 2025-02-19 15:05
下一篇 2025-02-19 15:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信