求m和n的最大公约数和最小公倍数

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

做这道题时,特意去查看了一下什么是最大公约数和最小公倍数.

后来直接去看了求解的思想,相信到企业中不会要求你闭门造车,若已有先例,可以研究之后拿来使用.

具体的思想是这样的:

  1>使两个数,m大于n

  2>m%n 若结果为0,那么n就是最大公约数

       若结果不为0,那么就要让n%(m%n).

写到这边就会发现,这又是一道关于递归的思想的问题.每次的运算都和上一次的运算的结果有关.

因此代码如下.

 1 //递归算法
 2     public static int maxCommonDivisor(int m, int n){
 3         if(m < n){
 4             int temp = m;
 5             m = n;
 6             n = temp;
 7         }
 8         if(m % n == 0){
 9             return n;
10         }else{
11             return maxCommonDivisor(n, m%n);
12         }
13
14     }

下面的这一种写法,和递归的思想实质上是一致的.采用了循环的形式.

 1     //循环法
 2     public static int maxCommonDivisor2(int m, int n){
 3         if(m < n){
 4             int temp = m;
 5             m = n;
 6             n = temp;
 7         }
 8         while(m % n != 0){
 9             int temp = m % n;
10             m = n;
11             n = temp;
12         }
13         return n;
14     }

最后,在求得最大公约数的基础上,最小公倍数很容易求得.

是m和n的乘积再除以最大公约数

1     public static int minCommonMultiple(int m, int n){
2         return m*n/maxCommonDivisor2(m, n);
3
4     }

大神真的有很多,以上的代码写的很规范,包括命名(不是我起的),很专业.对于我的学习很有帮助.

时间: 2024-12-26 06:00:55

求m和n的最大公约数和最小公倍数的相关文章

002:求两个整数的最大公约数和最小公倍数

求最大公约数可采用辗转相除法,其流程如图所示. 最小公倍数就是两个整数的乘积除以其最大公约数. 1 #include <stdio.h> 2 3 int main() 4 { 5 unsigned long a, b, c=0; //两个整数和临时变量 6 unsigned long lcm=0, gcd=0; //最小公倍数和最大公约数 7 8 while( 1 ) 9 { 10 printf("Please input two positive integers(spacebar

求两个正整数的最大公约数和最小公倍数(java)

1 package com.hpu.bai; 2 3 import java.util.Scanner; 4 5 public class Common { 6 public int mincom(int m,int n){ 7 int temp;int t = 0; 8 if(m<n){ 9 temp = n; 10 n =m; 11 m =temp; 12 } 13 if(m%n ==0) return n; 14 else 15 return mincom(m-n,n); 16 } 17

求两个整数的最大公约数和最小公倍数

//求最大公约数是用辗转相除法,最小公倍数是根据公式 m,n 的 最大公约数* m,n最小公倍数 = m*n 来计算 #include<stdio.h> //将两个整数升序排列 void ascNum(int *p1,int *p2) { int temp; if(*p1 > *p2) { temp = *p2; *p2 = *p1; *p1 = temp; } } //求两个整数的最大公约数 辗转相除法 int getAppr(int a, int b) { int c; ascNum

求两个整数的最大公约数与最小公倍数

//输入两个正整数m和n,求其最大公约数和最小公倍数. 方法一: public class ZuiDaoGongYueShuYuZuiXiaoGongBeiShu { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("请输入第一个整数m: "); int m=scanner.nextInt(); System.out.println(&

求两个数的最大最大公约数和最小公倍数

package java;    import java.util.ArrayList;  import java.util.List;  import java.util.Scanner;    public class java {      /**      * 输入两个正整数m和n,求其最大公约数和最小公倍数      */      public static void main(String args[]) {          // List<Integer> list=new 

C++求两个整数的最大公约数和最小公倍数

最小公倍数=两个整数的成绩 / 最大公约数 求最大公约数的方法: (1)辗转相除法 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int a,b,tmp,m; 6 cin>>a>>b; 7 m=a*b; 8 if(a<b) 9 { 10 tmp=b; 11 b=a; 12 a=tmp; 13 } 14 while(b!=0) 15 { 16 tmp=a%b; 17 a=b; 18 b

写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。

题目描述 输入 两个数 输出 最大公约数 最小公倍数 样例输入 6 15 样例输出 3 30 代码:#include<stdio.h>int gys(int a,int b){    while(a%b!=0)    {        int t;        t=a%b;        a=b;        b=t;        }        return b;    }int gbs(int a,int b){     return a*b/gys(a,b);    }int m

辗转相除法求最大公约数和最小公倍数

要求最小公倍数可先求出最大公约数 设要求两个数a,b的最大公约数 伪代码: int yushu,a,b: while(b不等于0) { yushu=a对b求余 b的值赋给a yushu的值赋给b } 代码: int gongyue() { int yushu,a,b; while(b) { yushu=a%b; a=b; b=yushu; } return b; } 此子函数可以求出两个数的最大公约数n    最小公倍数为a*b/n:

C语言求最大公约数和最小公倍数

求最大公约数和最小公倍数 假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因为 a=m*i; b=m*j; 最小公倍数为 m*i*j 那么,下面就开始计算a和b的最大公约数. 更相损减法: <九章算術·方田>作分數約簡時,提到求最大公因數方法:反覆把兩數的較大者減去較小者,直至兩數相等,這數就是最大公因數.這方法除了把除法換作減法外,與輾轉相除法完全相同.例如書中求91和