最大公因数和最大公倍数解法

/*

作  者:秋问

时  间:2020-12-11

问题描述:通过自定义函数求解最大公因数和最大公倍数

解法解析:看注释

郑重声明:点个关注点个赞呗 ^_^

编  外:多点鼓励,才会快乐多多,动力多多

*/

一:惯用思维

 1 #include "stdio.h"
 2 //最大公倍数
 3 int fun1(int m,int n){
 4     int min=m>n?n:m; //取两者之间小者 
 5     for(int i=min;i>=1;i--){ //从后面开始 
 6         if(m%i==0&&n%i==0){ //能被整除,即余0,得最大公因数 
 7             return m*n/i; //相乘得最大公倍数 
 8         }
 9     }
10 }
11 //最大公因数 
12 int fun2(int m,int n){
13     int min=m>n?n:m;
14     for(int i=min;i>=1;i--){
15         if(m%i==0&&n%i==0){ //类似最大公倍数的注释 
16             return i;
17         }
18     } 
19 }
20 main(){
21     int m,n;
22     scanf("%d %d",&m,&n);
23     //函数调用 
24     int x=fun1(m,n);
25     int y=fun2(m,n);
26     printf("%d %d\n",y,x);
27     return 0;
28 }
29  

二、辗转相除法--递归和非递归

 1 #include "stdio.h"
 2 int main(){
 3     int fun1(int ,int ); //函数声明 
 4     int fun2(int ,int );
 5     int fun3(int ,int );
 6     int m,n;
 7     scanf("%d %d",&m,&n); 
 8     printf("%d %d %d\n",fun1(m,n),fun2(m,n),fun3(m,n)); //函数调用 
 9     return 0; 
10 }
11 //最大公因数 
12 int fun1(int m,int n){
13     return n==0?m:fun1(n,m%n); //递归 
14     //m n 
15     //4 5
16     //5 4
17     //4 1
18     //1 0
19 }
20 //最大公倍数 
21 int fun2(int m,int n){
22     return m*n/fun1(m,n); //需要调用fun1,当fun1不存在时会出错 
23 } 
24 //最大公倍数 
25 int fun3(int m,int n){ //能够保证自身独立性 
26     int x=m,y=n;
27     while(y){
28         int tmp=x%y; //消减值 
29         //换位 
30         x=y;
31         y=tmp; 
32     }
33     return m*n/x; 
34 } 

 

 
 
 
 
posted @ 2020-12-12 23:13  秋问  阅读(517)  评论(0)    收藏  举报