Modular arithmetic
 
Betöltés...
Keresés...
Nincs egyezés
gcdx.cpp
Ugrás a fájl dokumentációjához.
1#include<iostream>
2using namespace std;
3#include "gcdx.h"
4
5namespace bme {
6
7 int gcdx(int a, int b, int& x, int& y) {
8 // Ha mind a, mind b 0, akkor irjunk ki hibát, és térjünk vissza 0-val:
9 if ((a == 0) && (b == 0)) {
10 cerr << "WARNING: gcd called with both arguments equal to zero." << endl;
11 x = 0;
12 y = 0;
13 return 0;
14 }
15
16 //ha b=0, akkor gcd(a,b) = |a|, x= 1 vagy -1, y tetszőleges (pl. 0)
17 if (b == 0) {
18 y = 0;
19 if (a < 0) {
20 x = -1;
21 return -a;
22 }
23 else {
24 x = 1;
25 return a;
26 }
27 }
28
29 int d = 0; //ebben tároljuk majd a vissztérési értéket, azaz a legnagyobb közös osztót
30
31 //ha b negatív, akkor megoldjuk a feladatot (-b)-re
32 if (b < 0) {
33 d = gcdx(a, -b, x, y);
34 y = -y;
35 return d;
36 }
37
38 //ha a negatív, akkor megoldjuk a feladatot (-a)-ra
39 if (a < 0) {
40 d = gcdx(-a, b, x, y);
41 x = -x;
42 return d;
43 }
44
45 //ezen a ponton b pozitív, a nemnegatív
46 int aa = b;
47 int bb = a % b;
48 int qq = a / b;
49 int xx = 0;
50 int yy = 0;
51
52 d = gcdx(aa, bb, xx, yy);
53
54 x = yy;
55 y = xx - qq * yy;
56
57 return d;
58 }
59
60}
Legnagyobb közös osztó előállítása.
Definition gcdx.cpp:5
int gcdx(int a, int b, int &x, int &y)
Legnagyobb közös osztó kiszámolása és előállítása.
Definition gcdx.cpp:7