Genişletilmiş UYGULAMA n, m) Tam sayıların her zaman pozitif olacağını varsayalım., tamsayı (a, b, gcd (n, m)), bu şekilde bir üç döner bir fonksiyonu iki tamsayı, n ve m verilen olan kombine olmak için Öklid algoritma
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))
Bir ekran yakalama resmi bağlantısı bulacaksınız. Tıklayın bana --->! [Link] http://prikachi.com/images.php?images/238/8749238o.png Birisi bir çözüm varsa ve işlevi oluşturmak için neyi değiştirebileceğime dair bir fikrim varsa, çok takdir edilecektir. fonksiyon için Testi: 3 2 Bu sonucu vermelidir birleştirmek => (1, -1,1)
Oh, anlıyorum! Denedim ve zaten içinde olduğunu ortaya çıktı. Ancak, bir hatayı düzeltmeden önce -> n birleştirme n = = (x1, y1, gcdx n m) gcd **. Her neyse, Haskell sıra dışı bir dil ve henüz kütüphanelerini bilmiyorum. Hızlı yanıt, açıklama ve yardım için teşekkürler! S.S [Neden -3 oranını aldığımı hatırla]: D –
Ayrıca '(q, r) = divMod n m' kullanabilirsiniz. – chepner