1. Przyjmij k <- 0, a następnie powtarzaj operacje: k <- k+ 1,
u <- u/2, v <- v/2 zero lub więcej razy do chwili gdy
przynajmniej jedna z liczb u i v przestanie być parzysta.
2. Jeśli u jest nieparzyste to przyjmij t <- -v i przejdź do kroku 4.
W przeciwnym razie przyjmij t <- u.
3. (W tym miejscu t jest parzyste i różne od zera). Przyjmij
t <- t/2.
4. Jeśli t jest parzyste to przejdź do 3.
5. Jeśli t > 0, to przyjmij u <- t, w przeciwnym razie przyjmij
v <- -t.
6. Przyjmij t <- u-v. Jeśli t ≠ 0 to wróć do kroku 3.
W przeciwnym razie algorytm zatrzymuje się z wynikiem u*2^k.
a kod to ;
Kod: Zaznacz cały
/*algorytm_B.c */#include <stdio.h>#include <stdlib.h>#include <math.h>int main (void){ int k, u, v, t; printf("Program wyszuka najwiekszy wspolny dzielnik liczb u i v.
"); printf("Podaj u = "); scanf("%d", &u); printf("Podaj v = "); scanf("%d", &v); k = 0; do { u /= 2; v /= 2; ++k; } while (u%2 != 0 || v%2 != 0); if (u%2 != 0) { t = (-1)*v; if (t%2 != 0) { do t /= 2; while (t%2 != 0); } else ; } else { t = u; do t /= 2; while (t%2 != 0); } if (t>0) u = t; else v = (-1)*t; t = u - v; do { do t /= 2; while (t%2 != 0); if (t>0) u = t; else v = (-1)*t; } while (t == 0); printf("GCD(u,v) = %d ", u*pow(2,k)); system("PAUSE"); return 0;}
może ktoś to poprawić dzieki wielkie