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。