linux shell求最大公约数,shell求最大公约数
1 #!/bin/bash
2 # gcd.sh: 最大公約數
3 #???????? 用Euclid運算法則
4
5 #? 兩個整數的"最大公約數"
6 #+ 是能被這兩個整數整除的大最整數.
7
8 #? Euclid運算法則采用逐次除法.
9 #? 每一次都重新賦值,
10 #+ 被除數
11 #+ 除數?
12 #+ 直到 余數 = 0.
13 #+ 最后被傳遞的值中:最大公約數 = 被除數.
14 #
15 #? 關于Euclid運算法則的討論有一個出色的討論,
16 #? 訪問Jim Loy的網站, http://www.jimloy.com/number/euclids.htm.
17
18
19 # ------------------------------------------------------
20 # 參數檢查
21 ARGS=2
22 E_BADARGS=65
23
24 if [ $# -ne "$ARGS" ]
25 then
26?? echo "Usage: `basename $0` first-number second-number"
27?? exit $E_BADARGS
28 fi
29 # ------------------------------------------------------
30
31
32 gcd ()
33 {
34
35?? dividend=$1??????????????????? #? 隨意賦值.
36?? divisor=$2???????????????????? #+ 這里在兩個參數賦大的還是小的都沒有關系.
37????????????????????????????????? #? 為什么?
38
39?? remainder=1??????????????????? #? 如果在循環中使用未初始化的變量,
40????????????????????????????????? #+ 在循環中第一個傳遞值會使它返回一個錯誤信息
41????????????????????????????????? #
42
43?? until [ "$remainder" -eq 0 ]
44?? do
45???? let "remainder = $dividend % $divisor"
46???? dividend=$divisor??????????? # 現在用最小的兩個數字來重復.
47???? divisor=$remainder
48?? done?????????????????????????? # Euclid運算法則
49
50 }??????????????????????????????? # 最后的$dividend變量值就是最大公約數.
51
52
53 gcd $1 $2
54
55 echo; echo "GCD of $1 and $2 = $dividend"; echo
56
57
58 # 練習:
59 # --------
60 #? 檢測命令行參數以確保它們是整數,
61 #+ 如果不是整數則給出一個適當的錯誤信息并退出腳本.
62
63 exit 0
總結
以上是生活随笔為你收集整理的linux shell求最大公约数,shell求最大公约数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第四十九章
- 下一篇: linux 其他常用命令