如何计算三个数字之间的最大公约数



我必须编写一个程序,使用欧几里得算法用三个数字计算gcd

我已经用 2 个数字编写了程序,效果很好,但我不知道如何用三个数字做同样的事情 (最大的问题是它应该与欧几里得算法有关(

if (z1==z2)
{
Console.WriteLine($"The gcd of two number is {z1}");
}
else { 
do
{
r = z1 % z2;
gcd = z1;
z1 = z2;
z2 = r;
} while (r != 0);
Console.WriteLine($"The gcd of two number is {gcd}");

您可以编写一个从 2 个数字中获取 GCD 的方法,并在使用 2 个数字调用它后,继续使用该结果和下一个数字调用它,直到没有更多的数字。

例如,我们可以编写一个方法来获取两个数字的 GCD(借用自本站(:

public static int GCD(int first, int second)
{
while (first != 0 && second != 0)
{
if (first > second) first %= second;
else second %= first;
}
return first == 0 ? second : first;
}

然后我们可以编写另一个方法,该方法接收可变数量的int参数(使用params数组(,该方法获取前 2 个数字的结果,然后通过将其与下一个数字一起传递给我们的 GCD 方法来继续更新该值:

public static int GCD(params int[] numbers)
{
// Do some argument validation and return 0 or throw an exception
if (numbers == null || numbers.Length == 0) return 0;
// Start with the result being just the first number
var result = numbers[0];
// Then get the GCD of the result and the next number 
// and store that back in the result variable
for(int i = 1; i < numbers.Length;i++)
{
result = GCD(result, numbers[i]);
}
return result;
}

现在我们可以根据需要使用任意数量的数字调用该方法:

Console.WriteLine(GCD(9, 18, 27));              // Output: 9
Console.WriteLine(GCD(4, 8));                   // Output: 4
Console.WriteLine(GCD(25, 15, 100, 30, 9000));  // Output: 5

相关内容

  • 没有找到相关文章

最新更新