Poniższy program realizuje wyznaczanie NWD i NWW.
Realizacja NWD odbywa się na dwa sposoby:
- algorytm Eulidesa - odejmowanie,
- algorytm Eulidesa - dzielenie.
Realizacja NWW korzysta z wyliczonego NWD (dowolną metodą - w poniższym programie użyliśmy metody dzielenia) i odbywa się według wzoru: NWW=a/NDW*b;
Jeżeli nie znasz jeszcze algorytmu Euklidesa i poszukujesz więcej informacji o sposobie jego działania, zapraszamy do zapoznania się z artykułami w dziale "Wstęp do algorytmiki": >>NWD dzielenie<< i >>NWD odejmowanie<<.
-
#include<iostream>
-
#include<ctime>
-
#include<algorithm>
-
using namespace std;
-
-
//deklaracja funkcji
-
int NWDo(int,int);
-
int NWDd(int,int);
-
int NWW(int,int);
-
-
/********** funkcja glowna ************/
-
int main()
-
{
-
int a,b;
-
srand(time(NULL));
-
for(int i=0;i<10;i++)
-
{
-
a=rand()%3000+1;
-
b=rand()%3000+1;
-
cout<<"\n\nNWD (odejmowanie) dla "<<a<<" i "<<b<<" wynosi "<<NWDo(a,b);
-
cout<<"\nNWD (dzielenie) dla "<<a<<" i "<<b<<" wynosi "<<NWDd(a,b);
-
cout<<"\nNWW dla "<<a<<" i "<<b<<" wynosi "<<NWW(a,b);
-
}
-
}
-
-
/******** definicje funkcji ************/
-
-
//NWD-Euklides odejmowanie
-
int NWDo(int x,int y)
-
{
-
while (x!=y)
-
if (x>y)
-
x-=y;
-
else
-
y-=x;
-
return x;
-
}
-
-
//NWD-Euklides dzielenie
-
int NWDd(int x,int y)
-
{
-
int r=x%y;
-
while (r!=0)
-
{
-
x=y;
-
y=r;
-
r=x%y;
-
}
-
return y;
-
}
-
-
//NWW - najmniejsz wspolna wielokrotnosc - do obliczenia wartosci korzytsamy z funkcji NWD (NWDd)
-
int NWW(int x,int y)
-
{
-
return x/NWDd(x,y)*y;
-
}
Niezależnie od wybranej metody NWD dla danych a i b zawsze ma taką samą wartość, równica w działaniu obu algorytmów (dzielnie i odejmowanie) uwidoczniona jest na końcu artykułu, gdzie w edyotrze online można przetestować wersję powyższego progrmau z dodanymi licznikami powtórzeń. Na podstawie tego doświadczenia widać, że medoda dzielenia zwraca wynik przy mniejszej liczby powtórzeń operacji zmierzaćych do wyznaczenia NWD.
Zobacz przykład wykonania powyższego kodu w edytorze online >>>
Więcej informacji -> Wikipedia