Tamsayılar açısından iki pozitif tamsayıların en büyük ortak bölenini yazabilen bir program yazmaya çalışıyorum.Bu tamsayıların lineer bir birleşimi açısından iki pozitif tamsayıların en büyük ortak bölenini yazmak için Öklid bölünmesi uygular
353 = 23 * 15 + 8
15 = 1 * 8 + 7
8: Örneğin, ben aşağıdaki adımları kullanarak gcd bulacağını, en Rakamları 353 ve 15 olduğunu varsayalım = 1 * = 7 * 1
yüzden gcd bu kadar uygulamış 1'dir 7 + 1
7:
//div_algo always takes int1 >= int2
int div_algo(int int1, int int2)
{
if (int2 == 0) //we are done
return int1;
int factor = 0;
int remainder = 0;
factor = int1/int2; //this is useful for linear combination
remainder = int1 % int2;
return div_algo(int2, remainder);
}
Sorun şu ki, eğer lineer kombinasyonu bulmak istersem, temelde geriye doğru çalışırım. Yani, benim örnekle devam:
1 = 1 * 8 - 1 * 7 (yerine 7 = 15-1 * 8)
1 = 1 * 8 - 1 * 15 + 1 * 8 = 2 * 8-1 * 15 (yerine 8 = 353 - 23 * 15)
1 = 2 * 353 - 46 * 15-1 * 15 = 2 * 353 - 15
47 ve orada gidin. Yaşadığım problem, önceki denklemleri nasıl değiştireceğimi bilmemek, böylece yedeklemeyi geri alabilmem.
"Genişletilmiş Öklid algoritması" Yukarı bak, bu onun için tam olarak ne olduğunu. – interjay
Sadece denklemleri saklamak zorunda değilsiniz, sadece rakamlar. İki yaklaşımdan herhangi biri: (1) özyinelemeli çağrının dönüş değerini bir değişkene atayın ve "çıkışta" ile bir şeyler yapın. (2) C++ 'daki tamsayıları depolamak için kullanılabilecek herhangi bir veri yapısını biliyor musunuz? –