Modular arithmetic
Betöltés...
Keresés...
Nincs egyezés
gcdx.cpp
Ugrás a fájl dokumentációjához.
1
#include<iostream>
2
using namespace
std;
3
#include "
gcdx.h
"
4
5
namespace
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
}
gcdx.h
Legnagyobb közös osztó előállítása.
bme
Definition
gcdx.cpp:5
bme::gcdx
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
gcdx.cpp
Készítette
1.13.2