最大公约数和最小公倍数问题

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

方法一:

基本思路:

先求出n个数中最大的那个数,如果这个数可以整除所有的数,则这是最小公倍数
 如果不能则令max+1直到找到可以整除所有的数的那个数为止

程序流程图如下:

package jj;
import java.util.*;
public class Bei3 {
	public static void main(String args[]){
	Scanner sc=new Scanner(System.in);
	System.out.println("为保证结果可靠,请输入的数字均在200以内");
	while(sc.hasNext()){
		int n=sc.nextInt();  //设置输入的数字个数
		int a[]=new int[n];
		int max=0;
		int min=200;
		for(int i=0;i<n;i++){
		a[i]=sc.nextInt();
		if(max<a[i]){
		max=a[i];	//先找出这n个数的那个最大数
			}
		if(min>a[i]){
			min=a[i];    //先找出这n个数中最小的那个数
			}
		}
		for(int i=max;;i++){
			boolean b=true;	//设置标记
			for(int j=0;j<n;j++){
				if(max%a[j]!=0){
				b=false;	
				//只要有一个数不能整除max则令标记为false
					}
					}
			max++;
			if(b){	//如果标记为true说明该max可以整除这n个数
				//则max为最小公倍数
			System.out.println("最小公倍数为 "+i);
			break;	//跳出循环
					}		
				}
		for(int i=min;;i--){
		boolean c=true;
		for(int j=0;j<n;j++){		
        	if(a[j]%min!=0){						
	c=false;//只要有一个数不能把min整除就标记false
							}
						}
			min--;
			if(c){//如果标记为true说明该min可以被这n个数整除
			//则min为最大公约数
			System.out.println("最大公约数为: "+i);
							break;  //跳出循环
						}
					}
			}
		}
}

方法2:

基本思路:

定义a,b等于1;先判断两个数是否为倍数关系,如果是,则大数为最小公倍数,小数为最大公因数;如果不是,从2 开始循环寻找公因子,每找到一个即乘以公约数变量a与公倍数变量b,并把原来的两个数除以共同的因子,最大公约数和最小公倍数分别为a,b

程序流程图:

 

package jj;

import java.util.Scanner;

public class Bei {	
	  public static void main(String[] args)
	  {
	    //从控制台输入两个数据
	   Scanner sc= new Scanner(System.in);
	    int m;
	    int n;
//	    int m=Integer.parseInt(args[0]);
//	    int n=Integer.parseInt(args[1]);
	    
	    while(sc.hasNext()){
	    	m=sc.nextInt();
	    	n = sc.nextInt();
	    	int a = 1 ;
	    int b = 1;
	    if (m > 0 && n >0)
	    {
	      if (m % n == 0 || n % m == 0) //先判定这两个数是否为倍数关系
	      {
	        if (m >= n)
	        {
	          System.out.println("最大公约数为" + n);// 小数为最大公约数
	          System.out.println("最小公倍数为" + m);// 大数为最小公倍数
	        }
	        else
	        {
	          System.out.println("最大公约数为" + m);// 小数为最大公约数
	          System.out.println("最小公倍数为" + n);// 大数为最小公倍数
	        }
	      }      
	      else
	      {
	        for (int i = 2; i <= m ; i ++ )//从2开始循环寻找两数共同的因子,
	        {
	          if (m % i == 0 && n % i == 0)
	          {
	            a *= i;//每找到一个即乘以公约数变量a与公倍数变量b
	            b *= i;
	            m /= i;//并把原来的两个数除以共同的因子
	            n /= i;
	            i = 1;//continue出来要执行for的结束语句i++,所以下一次循环i依然从2开始	            continue;
	          }
	          else if(m == i && (m % i != 0 || n % i != 0))
	          {
	            b = b * m * n;
	            System.out.println("最大公约数为" + a);
	            System.out.println("最小公倍数为" + b);
	          }
	        }
	      }
	    }
	  else
	  {
	    System.out.println("输入错误");  
	  }
	    }	    
	  }
	
}

方法3:

基本思路:

定义方法bei计算最大公约数和最小公倍数,循环出两个数的最大公因子,通过公式m*n/max计算最小公倍数,输入数据,调用方法bei,得到结果。

程序流程图:

 

package jj;
import java.util.Scanner; 
public class Bei2 {
	    public static void bei(int n,int m){    //定义方法bei计算最大公约数和最小公倍数 
	        int max=1;int min=1; 
	        for(int i=2;i<=n;i++)       //循环出两个数最大的公因子 
	        { 
	            if((n%i==0)&&(m%i==0))    
	            { 
	                max=i; 
	            }     
	        }        
	        min=m*n/max;  //计算最小公倍数 	       
	        	System.out.println("最大公约数是:"+max); 
	        	System.out.println("最小公倍数是:"+min); 
	                     
	    } 
	    public static void main(String[] args){//输入两个数,计算最小公倍数和最大公约数 
	        System.out.println("请输入两个数: "); 
	        Scanner sc =new Scanner(System.in); 
	        while(sc.hasNext()){
	        	int a=sc.nextInt(); 
	        int b=sc.nextInt(); 
	        bei(a,b);
	        continue;
	        }
	        
	    }     
}

 

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值