Вы можете написать метод, который получает GCD из 2 номеров, и после вызова его с 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