目錄
題目描述
正整數A和正整數B的最小公倍數是指:能被A和B整除的最小的正整數值。設計一個算法,求A和B的最小公倍數。
輸入描述:輸入兩個正整數A和B,例如
5 7
輸出描述:輸出A和B的最小公倍數,例如
35
解決方案
對於正整數A和B,假設這兩個數字的最大值爲max_number。則他們的最小公倍數範圍在閉區間 [max, A*B] 中。我們定義一個臨時變量current = max_number,current依次遞增到 A*B,在每一次遞增時觀察其是否是A,B的公倍數,若是則找到A和B的最小公倍數current。
對於current的遞增有一個注意點。在current遞增的過程中,依次自增1會浪費大量的時間。current只需要每次遞增max就可以準確找到A和B的最小公倍數了。(即每次遞增max_number值保證整除max,若找到同時能夠整除兩者則爲最小公倍數)
代碼
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func MaxNumber(number1, number2 int) int {
if number1 > number2 {
return number1
}
return number2
}
func main() {
reader := bufio.NewReader(os.Stdin)
data, _, _ := reader.ReadLine()
dataList := strings.Split(string(data), " ")
number1, _ := strconv.Atoi(dataList[0])
number2, _ := strconv.Atoi(dataList[1])
min := MaxNumber(number1, number2)
current := min
for {
if current % number1 == 0 && current % number2 == 0 {
break
}
current += min
}
fmt.Println(current)
}
代碼走讀
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
# 返回兩個int數的最大值
func MaxNumber(number1, number2 int) int {
if number1 > number2 {
return number1
}
return number2
}
func main() {
# 讀取兩個正整數
reader := bufio.NewReader(os.Stdin)
data, _, _ := reader.ReadLine()
dataList := strings.Split(string(data), " ")
number1, _ := strconv.Atoi(dataList[0])
number2, _ := strconv.Atoi(dataList[1])
# 確定最小公倍數範圍下限min
min := MaxNumber(number1, number2)
max := number1 * number2
# 遍歷current, current每次遞增min(即A、B兩個數中的最大值)。若current同時滿足整除A和B,則跳出循環,此時current爲最小公倍數
current := min
for {
if current >= max {
break
}
if current % number1 == 0 && current % number2 == 0 {
break
}
current += min
}
fmt.Println(current)
}