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

题目:求两个正整数的最大公约数和最小公倍数。

基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。

提高要求:1.三种以上算法解决两个正整数最大公约数问题。

                  2.求3个正整数的最大公约数和最小公倍数。

解题思路:

1.更相减损术法
两整数a和b:
① 若a>b,则a=a-b
② 若a③ 若a=b,则a(或b)即为两数的最大公约数,结束
④ 若a≠b,则再回去执行①

2.辗转相除法

两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数,结束
③ 若c≠0,则a=b,b=c,再回去执行① 

3.穷举法

① i= a b中的小数
② 若a,b能同时被i整除,则i即为最大公约数,结束
③ i–,再回去执行②

流程图;

JAVA:求两个正整数的最大公约数和最小公倍数_第1张图片

参考代码:


import java.util.Scanner;

import org.omg.CORBA.PUBLIC_MEMBER;

public class test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 Scanner scan = new Scanner(System.in);
	        System.out.print("请输入第一个整数:\n");
	        int a = scan.nextInt();
	        System.out.print("请输入第二个整数:\n");
	        int b = scan.nextInt();
	        System.out.println("利用递归求解"+a+"和"+b+"的最大公约数:"+gy(a, b)+",最小公倍数:"+a*b/gy(a, b));
	        System.out.println("利用欧几里得算法求解两个正整数的最大公约数和最小公倍数:");
	        gmn(a,b);
	        System.out.println("利用普通算法求解两个正整数的最大公约数和最小公倍数:");
	        fun(a, b);
	}
	
	//利用更相减损术求最大公约数
	public static int gy(int m,int n)                   
	{
	    int i,j,q;
	    if(m%2==0&&n%2==0)
	    {
	        i=m/2;
	        j=n/2;
	        while(i!=j)
	        {
	            if(i>j)
	                i-=j;
	            else
	                j-=i;
	        }
	        q=2*i;
	        return q;
	    }
	    else
	        while(m!=n)
	        {
	            if(m>n)
	                m-=n;
	            else
	                n-=m;
	        }
	        return m;
	}

	
	//利用欧几里得算法求解两个正整数的最大公约数和最小公倍数
	  public static void gmn(int m, int n)
	  {
		int i=m;
		int j=n;
	    while (true)
	    {
	      if ((m = m % n) == 0) {
	    	  System.out.println(i+"和"+j+"的最大公约数为:"+ n);
	    	  int t = i * j / n;
	    	  System.out.println(i+"和"+j+"的最小公倍数为:"+ t);  
	          break;
	      }
	      if ((n = n % m) == 0) {
	    	  System.out.println(i+"和"+j+"的最大公约数为:"+ m);
	    	  int t = i * j / m;
	    	  System.out.println(i+"和"+j+"的最小公倍数为:"+ t);  
	          break;
	      }
	    }
	  }

	  //利用普通算法求解两个正整数的最大公约数和最小公倍数
	  public static void fun(int m,int n) {
		  int i=m;
		  int j=n;
		  int x =0;
	      if(m < n){
	         x=m;
	        }
	      else {
	    	  x=n;
	      }
	      while(true) {
	    	  if (m%x!=0&&n%x!=0) {
				x--;
			}
	    	  else {
	    	  System.out.println(m+"和"+n+"的最大公约数为:"+ x);
		      int t = i * j / x;
		      System.out.println(m+"和"+n+"的最小公倍数为:"+ t);  
		      break;
	    	  }
	      }
	}
}

拓展:对于3个正整数求最大公约数和最小公倍数,可以先求出其中两个的最大公约数和最小公倍数,再求得出的最大公约数和最小公倍数与剩下的数的最大公约数和最小公倍数即可。

你可能感兴趣的:(JAVA:求两个正整数的最大公约数和最小公倍数)