Java——最大公約數&最小公倍數

一、最大公約數

歐幾里得算法又稱輾轉相除法,用於求兩個正整數num1, num2的最大公約數,記作gcd(num1, num2)

算法思想:

1)如果num1 < num2,交換num1, num2值

2)rem=num1 mod num2(即rem的餘數),若 rem = 0,算法結束,num2即爲答案

3)否則,互換:num1 ← num2,num2←rem,並返回第一步。

 //使用歐幾里得算法求最大公約數(輾轉相除法)
    public static int getGcd(int num1, int num2) {
        //兩個數字num1 > num2
        if (num1 < num2) {
            int temp = num1;
            num1 = num2;
            num2 = temp;
        }
        int rem = -1;
        while (num1 % num2 != 0) {
            rem = num1 % num2;
            num1 = num2;
            num2 = rem;
        }
        return num2;
    }

二、最小公倍數

最小公倍數(least common multiple) 記作lcm(num1, num2)

根據最大公倍數求最小公約數

 //求最小公倍數
    public static int getLcm(int num1, int num2){
        return num1 * num2/(getGcd(num1, num2));
    }

三、藍橋杯——核桃的數量  

問題描述

小張是軟件項目經理,他帶領3個開發組。工期緊,今天都在加班呢。爲鼓舞士氣,小張打算給每個組發一袋核桃(據傳言能補腦)。他的要求是:

1. 各組的核桃數量必須相同

2. 各組內必須能平分核桃(當然是不能打碎的)

3. 儘量提供滿足1,2條件的最小數量(節約鬧革命嘛)

輸入格式

輸入包含三個正整數a, b, c,表示每個組正在加班的人數,用空格分開(a,b,c<30)

輸出格式

輸出一個正整數,表示每袋核桃的數量。

樣例輸入1

2 4 5

樣例輸出1

20

樣例輸入2

3 1 1

樣例輸出2

3

//窮舉法求出最大公倍數
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int a = scan.nextInt();
        int b = scan.nextInt();
        int c = scan.nextInt();
        int data[] = new int[3];
        data[0] = a;
        data[1] = b;
        data[2] = c;
        Arrays.sort(data);
        for (int i = data[2]; ; i++) {
            if (i % a == 0 && i % b == 0 && i % c == 0) {
                System.out.println(i);
                break;
            }
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章