Наибольший общий делитель (GCD)

#list #for-loop #set #greatest-common-divisor

#python #Список #для цикла #установить #наибольший общий делитель

Вопрос:

 def get_divs(z):
      return [i for i in range(1, z) if z % i == 0]

def gcd(x, y):
      x_div=get_divs(x)
      y_div=get_divs(y)
      cd=set(x_div).intersection(y_div)
      gcd=cd[-1]
      print("The GCD of",x,"and",y,"is",gcd)
      return 1
 

Я пытаюсь заставить эту программу вычислять наибольший общий делитель (GCD) двух введенных пользователем положительных целых чисел (x и y). Функция set не возвращает список, который можно проиндексировать. Любые предложения относительно того, как я могу найти GCD?

Комментарии:

1. Вы могли бы попробовать преобразовать набор в список, используя list(cd) . В качестве альтернативы, если вам нужен самый большой элемент cd , используйте max(cd) .

Ответ №1:

Вот как должен выглядеть алгоритм.

 findGCD(int firstNum, int secondNum){
int smaller; int bigger;int remainder;
if(firstNum < secondNum) {
    smaller = firstNum;
    bigger = secondNum;
}  
else {
    smaller =  secondNum;
    bigger = firstNum;
}

while(true) {
    remainder = bigger % smaller;
    if(remainder == 0) {
         break;
    }
    else {
         bigger = smaller;
         smaller = remainder;
    }
}
return smaller;
}