一、最大公約數
歐幾里得算法又稱輾轉相除法,用於求兩個正整數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;
}
}
}
}