[C++] GCD lub NWD - algorytm Euklidesa i implementacja |
[C++] GCD lub NWD - algorytm Euklidesa i implementacja |
07.03.2006 - 13:28
Post
#1
|
|
![]() I code in C ![]() ![]() ![]() ![]() ![]() ![]() Grupa: Super Moderatorzy Postów: 1,470 Dołączył: 18.07.2004 Skąd: Wrocław Nr użytkownika: 15,059 |
NWD algorytm Euklidesa w C++
Cytat Algorytm dane są dwie liczby naturalne dodatnie a i b oblicz c jako resztę z dzielenia a przez b zastąp a przez b, zaś b przez c jeżeli b = 0, to szukane NWD = a, w przeciwnym wypadku przejdź do 2 Tekst zaciągniety ze strony: http://"http://pl.wikipedia.org/wiki/Algorytm_Euklidesa Odwzorowanie algorytmu w C++: Kod #include <stdio.h> int LiczNWD (int pierwsza, int druga); int main() { printf("NWD algorytm Euklidesa"); printf("Podaj pierwsza liczbe: "); int a; scanf("%d", &a); printf("Podaj druga liczbe: "); int b; scanf("%d", &b); printf("NWD tych liczb to %d", LiczNWD(a,b)); return 0; } int LiczNWD (int pierwsza, int druga) { while(druga>0) // Dopóki druga jest różna od zera ( liczby N ) { int bufor; bufor = pierwsza % druga; // Działania opisane w algorytmie pierwsza = druga; // Szczególnie ważny operator % zwraca resztęz dzielenia druga = bufor; } return pierwsza; } Istnieją również inne metody, przekształceia tego algorytmu, np. taka: Cytat Dopóki pierwsza liczba nie jest równa drugiej, wykonuj: Od wartości większej liczby, odejmij mniejszą liczbę. Oczywiście złożoność obliczeniowa jest o wiele większa, lecz efekt i działanie są zbliżone. Kod include <stdio.h> int LiczNWD (int pierwsza, int druga); // Deklaracja funkcji int main() { printf("NWD algorytm Euklidesa"); printf("Podaj pierwsza liczbe: "); int a; scanf("%d", &a); printf("Podaj druga liczbe: "); int b; scanf("%d", &b); printf("NWD tych liczb to %d", LiczNWD(a,b)); return 0; } int LiczNWD (int pierwsza, int druga) // Ciało funkcji { while(pierwsza!=druga) //Pętla kończy działanie, gdy obie strony są równe { if(pierwsza>druga) // Jeżeli pierwsza jest większa, odejmij od niej drugą pierwsza-=druga; else // Analogicznie druga-=pierwsza; } return pierwsza; // Zwracana wartość to NWD } Zastrzegam sobie praw autorskich do mojego tekstu, i oświadczam, że napisałem go sam, nie kopiując żadnych tekstów ( oprócz cytatów ) i sam wykonałem schematy rysunkowe. Jeżeli ktoś chciałby ten tekst opublikować, proszę wspomnieć o autorze i o kontakt guardian_mcleavy@o2.pl Dziękuję. |
|
|
|
![]() ![]() |
| Wersja Lo-Fi | Aktualny czas: 08.09.2010 - 22:51 |