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

基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大
公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。*
设计思路
最小公倍数,指两个或多个整数的公倍数里最小的那一个叫做它们的最小公倍数。
最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。求最大公约数有多种方法。

方法一:辗转相除法
也叫欧几里德算法,其方法是用较大的数除以较小数,上面较小除
数和得出的余数构成新的一对数,继续做上面的除法,直到出现能
够整除的两个数,其中较小的数(即除数)就是最大公约数。

public static void Max1(int a,int b){
        int i = a;
        int j = b;
        int x =0,y =0;
       //比较输入两个数的大小,a与b若大小顺序不对,就交换位置
        if(a>b)
        {
            x=a;
            a=b; 
            b=x;
            } 
        //最大公约数
        while(b != 0){
            y = a % b;
            a = b;
            b = y;
        }
        //最小公倍数
        int t = i * j/ a;
        System.out.println(i+"和"+j+"的最大公约数为:"+ a);
        System.out.println(i+"和"+j+"的最小公倍数为:"+ t);  
    }

方法二:定义法
输入的两个整数为,首先求其最小值,然后依次检验最小值,….,1
是否是两个整数的公约数,这样找到的第一个公约数就是最大公约 数。

public static void Max2(int a,int b){
    int min;
    //求得两个数的最小值
    if (a < b)
        {
        min = a;
        } 
    else{
        min=b;
    }
    //最大公约数
    int j = 1;
    for (int i=min; i >= 1; i--) {
        if (a % i == 0 && b % i == 0 ) {
            j = i;
            break;      
    }
}
    System.out.println("最大公约数是:" + j);
}

方法三:循环法
输入的两个整数为,检查2,3,4…是否为两个整数的最大公约数,直到所选值大于两个数中较小的一个。

public static void Max3(int a, int b) {
    int gcd=1,k=1;
    while(k<=a && k<=b)
    {
        if(a%k==0 && b%k==0)
            gcd=k;
        k++;
    }

    System.out.println("最大公约数的结果是:" + gcd);  

}

流程图详解:
求两个正整数的最大公约数和最小公倍数。_第1张图片

最小公倍数= (a * b * c)/最大公约数

//最小公倍数
        int t = i * j/ a;
        System.out.println(i+"和"+j+"的最小公倍数为:"+ t);

拓展部分(求三个整数的最大公约数和最小公倍数)

/*
 * 求三个数的最大公约数和最小公倍数
 */
public static void Max4(int a,int b,int c){
    //求得三个数的最小值
    int min;
    if (a < b && a < c) 
    {
        min = a;
        } 
    else if (c min = c;
        } 
    else
        min = b;
    //最大公约数
        int j = 1;
        for (int i=min; i >= 1; i--) {
            if (a % i == 0 && b % i == 0 && b % i == 0 ) {
                j = i;
                break;      
        }
    }
    System.out.println(a+","+b+"和"+c+"的最大公约数是:" + j);
    //求三个数的最大值
    int max;
    if (a > b) 
    {
        max = a;
        } else {
            max = b;
            }
    if (max < c) 
    {
        max = c;
        }

    //最小公倍数
    int k=1;
    for(int i=max;;i++){
        if(i%a==0&i%b==0&&i%c==0){
            j=i;
            break;
        }
    }
    System.out.println(a+","+b+"和"+c+"的最小公倍数为:"+ j); 
    }

源代码:

import java.util.Scanner;

public class example {
    public static void main(String[]args){
        @SuppressWarnings("resource")
        Scanner scan = new Scanner(System.in);  //键盘输入数字
        System.out.print("请输入第一个整数:\n");
        int a = scan.nextInt();  //将第一个数赋给a
        System.out.print("请输入第二个整数:\n");
        int b = scan.nextInt();  //将第二个数赋给b
        System.out.print("请输入第三个整数:\n");
        int c = scan.nextInt();  //将第二个数赋给c
        Max1(a, b);  //方法一
        Max2(a, b);  //方法二
        Max3(a, b);  //方法三
        Max4(a, b,c);  //求三个数的最大公约数和最小公倍数
    }

/*
 * 方法一:辗转相除法(欧几里得算法):在循环中,只要除数不等于0,用较大的数除以较小的数,将小的一个数作为下一轮循环的大数,
 * 取得的余数作为下一轮循环较小的数,如此循环直到较小的数值为0,返回较大的数。即为最大公约数。
 *最小公倍数= (a * b * c)/最大公约数
 */
public static void Max1(int a,int b){
        int i = a;
        int j = b;
        int x =0,y =0;
       //比较输入两个数的大小,a与b若大小顺序不对,就交换位置
        if(a>b)
        {
            x=a;
            a=b; 
            b=x;
            } 
        //最大公约数
        while(b != 0){
            y = a % b;
            a = b;
            b = y;
        }
        //最小公倍数
        int t = i * j/ a;
        System.out.println(i+"和"+j+"的最大公约数为:"+ a);
        System.out.println(i+"和"+j+"的最小公倍数为:"+ t);  
    }

/*
 * 方法二:定义法:输入的两个整数为a和b,首先求a和b的最小值min,赋给i,然后依次检验i,i-1,i-2,....,1是否是a和b的公约数,
 * 这样找到的第一个公约数就是最大公约数。
 */
public static void Max2(int a,int b){
    int min;
    //求得两个数的最小值
    if (a < b)
        {
        min = a;
        } 
    else{
        min=b;
    }
    //最大公约数
    int j = 1;
    for (int i=min; i >= 1; i--) {
        if (a % i == 0 && b % i == 0 ) {
            j = i;
            break;      
    }
}
    System.out.println("最大公约数是:" + j);
}

/*
 * 方法三:循环法:输入的两个整数为a和b,检查k(k=2,3,4…)是否为a和b的最大公约数,直到k大于两个数中较小的一个。
 */
public static void Max3(int a, int b) {
    int gcd=1,k=1;
    while(k<=a && k<=b)
    {
        if(a%k==0 && b%k==0)
            gcd=k;
        k++;
    }

    System.out.println("最大公约数的结果是:" + gcd);  

}
/*
 * 求三个数的最大公约数和最小公倍数
 */
public static void Max4(int a,int b,int c){
    //求得三个数的最小值
    int min;
    if (a < b && a < c) 
    {
        min = a;
        } 
    else if (c else
        min = b;
    //最大公约数
        int j = 1;
        for (int i=min; i >= 1; i--) {
            if (a % i == 0 && b % i == 0 && b % i == 0 ) {
                j = i;
                break;      
        }
    }
    System.out.println(a+","+b+"和"+c+"的最大公约数是:" + j);
    //求三个数的最大值
    int max;
    if (a > b) 
    {
        max = a;
        } else {
            max = b;
            }
    if (max < c) 
    {
        max = c;
        }

    //最小公倍数
    int k=1;
    for(int i=max;;i++){
        if(i%a==0&i%b==0&&i%c==0){
            j=i;
            break;
        }
    }
    System.out.println(a+","+b+"和"+c+"的最小公倍数为:"+ j); 
    }
}

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