Swift程式:求兩個數的最大公約數
本教程將討論如何編寫一個Swift程式來求兩個數的最大公約數。
最大公約數 (GCD) 也稱為最大公因數或最高公因子 (HCF)。兩個正數的最大公約數定義為這兩個正數的公因數中最大的正數。GCD的值不能為0或負數。兩個數的GCD的最小值始終為1。例如,我們有兩個數24和30。
24的因數 = 2 x 2 x 2 x 3
30的因數 = 2 x 3 x 5
因此,GCD(24, 30) = 2 x 3 = 6,因為2 x 3是公因數。
以下是相同的演示 -
輸入
假設我們的輸入是
Number 1 = 24 Number 2 = 30
輸出
期望的輸出是
GCD = 6
歐幾里得演算法
通常,要找到兩個數的最大公約數,我們需要首先找到它們的因數,然後取它們的最大公因數來計算GCD。這種方法只對較小的數字有效,但如果數字很大,這種方法就很難找到GCD。因此,為了克服這個困難,我們使用歐幾里得演算法。
在這個歐幾里得演算法中,我們除以兩個數,直到它們的餘數為0。
GCD(m, n) = GCD(n, m%n)
這裡,m%n用於查詢m和n的餘數。
在Swift中,我們可以使用以下任何一種方法來計算兩個數的最大公約數
方法1 - 迭代法
我們可以使用while迴圈來計算GCD。
演算法
以下是演算法 -
步驟1 - 建立一個帶有兩個引數的函式。
步驟2 - 宣告一個值為0的變數,即x = 0。
步驟3 - 宣告兩個名為y和z的int型別變數。這裡,y使用max()函式儲存num1和num2中的最大數,而z使用min()函式儲存num1和num2中的最小數。
var y: Int = max(num1, num2) var z: Int = min(num1, num2)
這裡的max()和min()確保最大數應該被最小數整除。
步驟4 - 執行while迴圈,直到z != 0。
步驟5 - 使用%運算子查詢餘數。
步驟6 - 返回GCD
步驟7 - 使用兩個引數呼叫findGCD(num1:78, num2:46)函式,並將輸出儲存在result變數中。
步驟8 - 列印輸出。
示例
以下程式演示瞭如何使用迭代方法求兩個數的最大公約數。
import Swift import Foundation // Function to find gcd of two numbers func findGCD(num1: Int, num2: Int) -> Int { var x = 0 // Finding maximum number var y: Int = max(num1, num2) // Finding minimum number var z: Int = min(num1, num2) while z != 0 { x = y y = z z = x % y } return y } // Calling Function var result = findGCD(num1:78, num2:46) print("GCD of 78 and 46 is ", result)
輸出
GCD of 78 and 46 is 2
在上面的程式碼中,我們建立了一個名為findGCD()的函式來查詢兩個數的最大公約數。此函式遵循歐幾里得演算法。因此,首先找到給定兩個數字中最大和最小的數字,以便最大數字可以被最小數字整除。然後找到它們的餘數,直到餘數的值為0。現在呼叫findGCD()函式,並將78和46作為引數傳遞給它。因此,findGCD()函式的工作原理如下:
findGCD(78, 46): x = 0 y = max(78, 46) = 78 z = min(78, 46) = 46 while 46 != 0 { x = 78 y = 46 z = x % y => 78 %46 = 32 } while 32 != 0 { x = 78 y = 32 z = x % y => 78 %32 = 14 } while 14 != 0 { x = 32 y = 14 z = x % y => 32 % 14 = 4 } while 4 != 0 { x = 14 y = 4 z = x % y => 14 % 4 = 2 } while 2 != 0 { x = 4 y = 2 z = x % y => 4 % 2 = 0 } return y => 2
因此,顯示輸出78和46的最大公約數是2。
方法2 - 遞迴法
我們可以使用遞迴方法計算GCD。
演算法
以下是演算法 -
步驟1 - 建立一個帶有兩個引數的函式。
步驟2 - 宣告一個名為res的int型別變數來儲存餘數。
let res: Int = num1 % num2
步驟3 - 檢查res != 0。如果條件為真,則遞迴呼叫findGCD()函式。否則返回num2,因為餘數為零,這意味著我們找到了兩個數的GCD。
步驟4 - 呼叫函式並將結果儲存在“result”變數中。
步驟5 - 列印輸出。
示例
以下程式演示瞭如何使用遞迴方法求兩個數的最大公約數。
import Swift import Foundation // Function to find gcd of two numbers func findGCD(num1: Int, num2: Int) -> Int { let res: Int = num1 % num2 if res != 0{ return findGCD(num1: num2, num2: res) } else{ return num2 } } // Calling Function var result = findGCD(num1:12, num2:8) print("GCD of 12 and 8 is ", result)
輸出
GCD of 12 and 8 is 4
在上面的程式碼中,我們建立了一個名為findGCD()的函式來查詢兩個數的最大公約數。此函式也遵循歐幾里得演算法。在此函式中,我們透過自呼叫函式來查詢兩個數的餘數。現在呼叫findGCD()函式,並將12和8作為引數傳遞給它。因此,findGCD()函式的工作原理如下:
findGCD(12, 8): res = num1 % num2 = 12 % 8 = 4 if 4 != 0{ return findGCD(num1: 8, num2: 4) } else{ return num2 } res = 8 % 4 = 0 if 0 != 0{ return findGCD(num1: 8, num2: 4) } else{ return num2 => 4 }
因此,顯示輸出12和8的最大公約數是4。