Я хочу создать комбинацию функций, которая задает два целых числа n и m, возвращает тройку целых чисел (a, b, gcd (n, m)), такую что: am + bn = gcd (n, m) Не следует предполагать, что целые числа всегда будут положительными.Реализация расширенного евклидова алгоритма
gcd :: Int -> Int -> Int
gcd n m
| n == m = n
| n > m = gcd (n-m) m
| n < m = gcd n (m-n)
combine :: Int ->Int -> (Int,Int,Int)
x1=1; y1=0; x2=0; y2=1
while (m /=0)
( q=div n m ; r=mod n m ; n=m ; m=r
t=x2 ; x2=x1-q*x2 ; x1=t
t=y2 ; y2=y1-q*y2 ; y1=t )
combine n m = (x1,y1,gcd(n,m))
Вы найдете ссылку на изображение с экрана. Нажмите на меня --->! [Link] http://prikachi.com/images.php?images/238/8749238o.png Пожалуйста, если у кого-то есть решение и у меня есть идея, что я могу заменить для создания функции, было бы очень признательно. Тест для функции: объединить 3 2 должен дать этот результат => (1, -1,1)
О, я вижу! Я попробовал, и оказалось, что он уже в нем. Однако я исправил вашу ошибку, прежде чем где -> объединить n m = (x1, y1, gcdx n m) gcd **. Во всяком случае, Haskell - необычный язык, и я еще не знаю его библиотек. Спасибо за быстрый ответ, объяснение и помощь! P.S [Idk, почему я уже ставлю -3): D –
Вы также можете использовать '(q, r) = divMod n m'. – chepner