algorytm euklidesa

algorytm euklidesa
0

Treść zadania:

Napisz algorytm znajdowania największego wspólnego dzielnika pary liczb.

Takie zadanie otrzymałem do wykonania. Nie bardzo wiem, jak się za nie zabrać. Ogólnie z matematyki jestem noga.

PrzemolPrzemol
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:225
0
Kopiuj
int nwd(int m, int n)
{
	if (m == n)
		return m;
	else if (m > n)
		return nwd(m-n, n);
	else 
		return nwd(n-m, m);
}

Przyspieszenie działania algorytmu (w wyniku zmniejszenia liczby rekurencyjnych wywołań funkcji) możesz uzyskać, zastępując wielokrotne odejmowanie tej samej liczby dzieleniem z resztą

Kopiuj
int nwd(int m, int n)
{
	if (m == 0)
		return n;
	else if (n == 0)
		return m;
	else if (m == n)
		return m;
	else if (m > n)
		return nwd(m%n, n);
	else
		return nwd(n%m, m);
}

In progress: C++ || Asm
edytowany 1x, ostatnio: PrzemolPrzemol
B4
  • Rejestracja:około 9 lat
  • Ostatnio:około 8 lat
  • Postów:8
0

Chyba najłatwiejsze rozwiązanie to odejmowanie w pętli mniejszej liczby od większej aż obie zmienne będą sobie równe - uzyskana wartość jest wtedy największym wspólnym dzielnikiem.

Kopiuj
while(numA!=numB)
{
   if(numA>numB) 
   {
      numA-=numB;
   }
   else 	
   {
      numB-=numA;
   }
}
edytowany 2x, ostatnio: buffalo42
bogdans
Przemyśl swoją propozycję, numA=1, numB=10000000000. Sensowny algorytm winien korzystać z operatora modulo (%).
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:mniej niż minuta
0

Nie wiem czemu ludzie są aż tak nierozgarnięci (by nie używać mocniejszych słów). Wystarczy:

  • wpisać w googla
  • kliknąć pierwszy link (do wiki)
  • wystarczy przejrzeć nie trzeba nawet czytać
  • copy-paste
    GOTOWE

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
0

Bo nie każdy musi być od radu wredny aby używać mocniejszych słów? Nie zamieniajcie się w drugą elektrodę.

Azarien
gdybyśmy byli elektrodą, mielibyśmy osobny dział: „algorytm euklidesa - gotowce”
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:17 dni
0
PrzemolPrzemol napisał(a):
Kopiuj
int nwd(int m, int n)
{
	if (m == n)
		return m;
	else if (m > n)
		return nwd(m-n, n);
	else 
		return nwd(n-m, m)
}

to nie będzie działać poprawnie.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
bogdans
Nawet po dopisaniu brakującego średnika.
_13th_Dragon
Właśnie o tym mówię.
bogdans
Wiedziałem, że nie chodzi Ci o średnik.
PrzemolPrzemol
Moglibyście powiedzieć dlaczego? Nie sprawdzałem tego, ani drugiego wrzuconego przeze mnie kodu z modulo, na szybko pisałem i myślałem, że będzie ok
PrzemolPrzemol
A średnik mi umknął

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.