diszkrét matematika 6. eloadásmgyongyi/diszkretmat/6_szamrendszerek.pdfdiszkrét matematika 6....

24

Upload: others

Post on 26-Feb-2020

17 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Diszkrét matematika

6. el®adás

MÁRTON Gyöngyvé[email protected]

Sapientia Egyetem,Matematika-Informatika TanszékMarosvásárhely, Románia

2019, ®szi félév

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 2: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Mir®l volt szó az elmúlt el®adáson?

számtartományok: komplex számok

másodfokú egyenlet komplex gyökei

m¶veletek komplex számokkal: szorzat, hatványozás, stb

fraktálok: Mandelbrot, Julia

számrendszerek

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 3: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Mir®l lesz szó?

számrendszerek

számrendszerek közötti átalakítások

Más számrendszerek:

vegyes alapú számrendszereka faktoriális számrendszera Fibonacci számrendszer

Fibonacci számok

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 4: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Számrendszerek

egész számok: bármely 1-nél nagyobb számrendszerben ábrázolhatóak,

a számítástechnikában gyakran használt számrendszerek: 10, 2, 8, 16, 256,

2-es számrendszer: bináris számrendszer,8-as számrendszer: oktális számrendszer,16-os számrendszer: hexadecimális számrendszer,

legyen nr az a szám, amit átszeretnénk írni b számrendszerbe, ekkor,Z∗-al jelölve a nem negatív egész számok halmazát:

nr = akbk + ak−1b

k−1 + · · ·+ a1b1 + a0b

0,ahol k ∈ Z∗, ai ∈ Z∗, és ai < b, minden i ∈ {0, . . . , k} értékre és ak 6= 0,

a nr szám b számrendszerben felírt számjegyeit a következ® lista elemei

alkotják: [an, an−1, . . . , a2, a1]

2-es számrendszerben 2 szimbólum van: 0, 1,16-os számrendszerben 16 szimbólum van:0, 1, 2, . . . , 9,A,B,C ,D,E ,F ,256-os számrendszerben 256 szimbólum van.

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 5: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Algoritmus: 10-es számrendszerb®l b számrendszerbe

nr -et elosztjuk b-vel, legyen az osztási egészrész q0, a maradék a0, ekkorfennáll: n = b · q0 + a0, ahol 0 ≤ a0 < b.

q0-ot elosztjuk b-vel, legyen az osztási egészrész q1, a maradék a1, ekkorfennáll : q0 = b · q1 + a1, ahol 0 ≤ a1 < b.

addig folytatjuk az osztást, amíg 0 osztási egészrészt kapunk,

b számrendszerbeli számjegyeket: ak , ak−1, . . . a1, a0-t az osztási folyamatsorán el®állt maradékok alkotják

Pl. Alakítsuk át 7432-t 16-os számrendszerbe:

7432 = 464 · 16+ 8464 = 29 · 16+ 029 = 1 · 16+ 131 = 0 · 16+ 1

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 6: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Algoritmusok Pythonban

1. feladat

Írjunk programot, amely átalakít egy számot 10-es számrendszerb®l bszámrendszerbe.

Az eredmény egy lista típusú adat lesz, amely tartalmazza a b számrendszerbeliszámjegyeket.

def conv_10b(nr, b):

L = []

while nr > 0:

L = [nr % b] + L

nr = nr // b

return L

>>> conv_10b(14, 2)

[1, 1, 1, 0]

Ha az L = [nr % b] + L sor helyett az L = L + [nr % b] sort írjuk, akkorfordított sorrendet kapunk.

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 7: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Algoritmus: b számrendszerb®l 10-es számrendszerbe

hatványösszeget számolunk a b számrendszerbeli számjegyekb®l

Pl. Alakítsuk át 2D5A8-t 10-es számrendszerbe:

2D5A8 = [2, 13, 5, 10, 8]

16 · 0+ 2 = 2

16 · 2+ 13 = 16 · 2+ 13

16 · (16 · 2+ 13) + 5 = 162 · 2+ 16 · 13+ 5

16 · (162 · 2+ 16 · 13+ 5) + 10 = 163 · 2+ 162 · 13+ 16 · 5+ 10

16 · (163 · 2+ 162 · 13+ 16 · 5+ 10) + 8 = 164 · 2+ 163 · 13+ 162 · 5+ 16 · 10+ 8

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 8: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Algoritmusok Pythonban

2. feladat

Írjunk programot, amely átalakít egy b számrendszerbeli számot 10-esszámrendszerbe.

A függvény bemenete egy lista típusú adat lesz, amely tartalmazni fogja a bszámrendszerbeli számjegyeket; a függvény kimenete, pedig egy egész számlesz.

def conv_b10(L, b):

nr = 0

for elem in L:

nr = nr * b + elem

#print (nr)

return nr

>>> conv_b10([1, 1, 1, 0], 2)

14

>>> conv_b10(conv_10b(65, 2), 2)

65

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 9: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Kapcsolat a 2, 8, 16 számrendszerek között

bináris → oktális: hármas csoportokat formálunk:

Pl. [1, 1, 1, 1, 0, 1, 1]→ [1, 1, 1, 1, 0, 1, 1]→ [1, 7, 3]

bináris → hexadecimális: négyes csoportokat formálunk

Pl. [1, 1, 1, 1, 0, 1, 1]→ [1, 1, 1, 1, 0, 1, 1]→ [7,B]

bináris → 2k : k-as csoportokat formálunk

Pl. 2→ 256 = 28, 8-as csoportokat formálunk:[1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1]→ [1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1]→

[57, 107]

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 10: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Algoritmusok Pythonban

3. feladat

Írjunk programot, amely egy 2-es számrendszerben megadott számot átalakít 2k

számrendszerbe.

def conv_2_2k(L, k):

nr = 0

m = len(L) % k

for elem in L[:m]:

nr = nr * 2 + elem

if nr != 0: nL = [nr]

nr, i = 0, 0

for elem in L[m:]:

nr = nr * 2 + elem

i += 1

if i == k:

nL = nL + [nr]

nr, i = 0, 0

return nL

Házi feladat: módosítsuk a fenti kódrészletet, úgy hogy ne adjon futási hibát, ha a

bemeneti L lista hossza osztható k-val.

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 11: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Algoritmusok Pythonban

Alakítsunk át egy számot 2-es számrendszerb®l 8 = 23-as számrendszerbe:

>>> conv_2_2k([1, 1, 0, 1, 0, 1], 3)

[6, 5]

Alakítsunk át egy számot 2-es számrendszerb®l 256 = 28-as számrendszerbe:

>>> conv_2_2k([1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1], 8)

[57, 107]

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 12: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Algoritmusok Pythonban

4. feladat

Írjunk programot, amely egy 2k számrendszerben megadott számot átalakít2-es számrendszerbe.

def conv_2k_2(L, k):

nL = []

for elem in L:

sL = []

for i in range(k):

sL = [elem % 2] + sL

elem = elem // 2

nL += sL

return nL

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 13: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Algoritmusok Pythonban

Alakítsunk át egy számot 8 = 23 -as számrendszerb®l 2-es számrendszerbe

>>> conv_2k_2([6, 5], 3)

[1, 1, 0, 1, 0, 1]

Alakítsunk át egy számot 256 = 28-os számrendszerb®l 2-es számrendszerbe

>>> conv_2k_2([57, 107], 8)

[0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1]

A két függvényt együtt alkalmazva:

>>> conv_2_2k(conv_2k_2([217, 107, 28, 142, 55], 8), 8)

[217, 107, 28, 142, 55]

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 14: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Más számendszerek

Vegyes alapú számrendszerek

a számrendszer alapszáma változópéldául, id®mérés: 27. hét, 3. nap, 6 óra, 20 perc, 15 másodperc.27523762420601560az index szám az alapszámot, a mértékegységet jelzi; a piros szín¶számok, a számjegyek azt jelzik, hogy az adott mértékegységb®lhányat használunk fel

A faktoriális-számrendszer

Cantor ábrázolásnak is mondjákalapját az képezi, hogy bármely szám egyértelm¶en felírható afaktoriális függvény értékeinek segítségével

nr = an · n! + an−1 · (n − 1)! + · · ·+ a2 · 2! + a1 · 1!, aholai ∈ [0, 1, . . . , i ], bármely i ∈ [1, 2, . . . , n]

a nr szám faktoriális számrendszerben felírt számjegyeit a következ®lista elemei alkotják: [an, an−1, . . . ], a2, a1]

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 15: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

A faktoriális-számrendszer

Pl. Mennyi (8172)10, faktoriális-számrendszerbeli alakja?

8172 = 1 · 7! + 4 · 6! + 2 · 5! + 0 · 4! + 2 · 3! + 0 · 2! + 0 · 1!8172 = 1 · 5040+ 4 · 720+ 2 · 120+ 2 · 68172 = [1, 4, 2, 0, 2, 0, 0]faktBase

Pl. Mennyi (45389)10, faktoriális-számrendszerbeli alakja?

45389 = 1 · 8! + 1 · 7! + 0 · 6! + 0 · 5! + 1 · 4! + 0 · 3! + 2 · 2! + 1 · 1!45389 = 1 · 40320+ 1 · 5040+ 1 · 24+ 2 · 2+ 1 · 145389 = [1, 1, 0, 0, 1, 0, 2, 1]faktBase

Az algoritmus:

a nr szám ábrázolása esetén létezik egy n egész szám, amelyre:n! ≤ nr < (n + 1)!az osztási algoritmus szerint nr = an · n! + rn, ahol 0 ≤ an ≤ n és0 ≤ rn < n!hasonlóan, felírható: rn = an−1 · (n − 1)! + rn−1, ahol0 ≤ an−1 ≤ (n − 1) és 0 ≤ rn−1 < (n − 1)!tehát iterálva kapjuk az an, an−1, . . . a1 értékeket, amelyek aszámrendszerbeli számjegyeket fogják jelenteni.

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 16: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

A faktoriális-számrendszer

Hatékonyabb algoritmus a nr szám faktoriális számrendszerbeli alakjának ameghatározására:

meghatározzuk nr 2-vel való osztási egészrészét (q1), illetve osztásimaradékát (a1), felírható: nr = 2 · q1 + a1

meghatározzuk q1 3-mal való osztási egészrészét, illetve osztásimaradékát, felírható: q1 = 3 · q2 + a2

folytatjuk az osztási folyamatot a 4, 5, ... értékekkel, amíg az osztásiegészrész nem lesz 0.

az osztási folyamat során kiszámolt maradékok lesznek nr faktoriálisszámrendszerbeli számjegyei

fennáll:nr = 2 ·(3 ·(4 ·(5 ·(...)+a4)+a3)+a2)+a1 =... ·4! ·a4+3! ·a3+2! ·a2+a1

nr = [an, an−1, . . . a2, a1]faktBase

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 17: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

A faktoriális-számrendszer

5. feladat

Határozzuk meg egy szám faktoriális számrendszerbeli számjegyeit.

def digitToFaktB(nr):

L = []

n = 2

while nr != 0:

q = nr // n

a = nr - q * n #a = nr % n

#print (nr, q, i, a, end = "\n")

nr = q

L = [a] + L

n = n + 1

return L

>>> digitToFaktB(45389)

[1, 1, 0, 0, 1, 0, 2, 1]

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 18: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

A faktoriális-számrendszer

Határozzuk meg az el®z® oldalon megadott algoritmus szerint, 8172 faktoriálisszámrendszerbeli számjegyeit:

nr q n a

8172 4086 2 04086 1362 3 01362 340 4 2340 68 5 068 11 6 211 1 7 41 0 8 1

q = nr // n

a = nr - q * n #a = nr % n

nr = q

8172 = 2 · (3 · (4 · (5 · (6 · (7 · (8 · 0+ 1) + 4) + 2) + 0) + 2) + 0) + 0

8172 = 2 · 3 · 4 · 5 · 6 · 7 · 1+ 2 · 3 · 4 · 5 · 6 · 4+ 2 · 3 · 4 · 5 · 2+ 2 · 3 · 4 · 0+ 2 · 3 · 2+ 2 · 0+ 0

8172 = [1, 4, 2, 0, 2, 0, 0]faktBase

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 19: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

A Fibonacci számrendszer

a Fibonacci-számrendszert, Zeckendorf ábrázolásnak is hívjuk

alapját az képezi, hogy bármely szám egyértelm¶en felírható Fibonacciszámok összegeként:

nr = an · Fn + an−1 · Fn−1 + · · ·+ a2 · F2 + a1 · F1, aholai ∈ [0, 1], bármely i ∈ [1, 2, . . . , n], és Fn,Fn−1, . . . ,F2,F1 a 0,1

kezd®értékeket elhagyva kapott Fibonacci számsorozat.

a nr szám Fibonacci számrendszerben felírt számjegyeit a következ® listaelemei alkotják: [an, an−1, . . . , a2, a1]

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 20: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

A Fibonacci számrendszer

6. feladat

Határozzuk meg egy szám Fibonacci számrendszerbeli alakját. Az eredményt egystring típusú változóba generáljuk ki.

A fibL függvény, meghatározza, a 1, 2-vel kezd®d® Fibonacci számsorozat elemeit,

amelyek nem nagyobbak mint nr , egy lista típusú változóba. Ezt meg kell írni!

def digitToFib(nr):

fL = fibL(nr)

L = ''

for elem in fL[::-1]:

if nr >= elem:

L += '1'

nr = nr - elem

#print (elem, end = ' ')

else: L += '0'

#print('')

return L

>>> digitToFib(100)

1000010100

100 = 89 + 8 + 3

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 21: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

A Fibonacci számsorozat

A számsorozat: 0, 1, 1, 2, 3, 5, 8, 13, . . . ,

A rekurziós képlet: F0 = 0,F1 = 1,Fn = Fn−1 + Fn−2,

léteznek hatékonyabb rekurziós összefüggések,

alkalmazásuk:

kombinatorika,algoritmusok futási idejének elemzése,minden pozitív egész szám felírható Fibonacci számok összegeként,aranymetszés, zene, m¶vészetek, természet.

A Lucas számok, ugyanaz az összefüggés a számok között, más a két kezdetiérték:

A számsorozat: 2, 1, 3, 4, 7, 11, 18, 29, 47, . . . ,

A rekurziós képlet: L0 = 2, L1 = 1, Ln = Ln−1 + Ln−2,

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 22: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

A Fibonacci számsorozat

7. feladat

Határozzuk meg az n-ik Fibonacci számot.

A következ® algoritmus futási ideje exponenciális, az el®z® oldalon megadott rekurzív

képletet alkalmazza:

def fibR1 (n):

if n == 0: return 0

if n == 1: return 1

return fibR1 (n-1) + fibR1 (n-2)

A következ® algoritmus futási ideje lineáris, más rekurzív képletet használva:

def fAux(a, b, n):

if n == 1: return a

return fAux(b, a + b, n-1)

def fibR2(n):

return fAux(1, 1, n)

>>> fibR2(100)

354224848179261915075

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 23: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Az n-ik Fibonacci szám

8. feladat

Alkalmazva a következ® képletet határozzuk meg az n-ik Fibonacci számot:

Fn =

(1+√5

2

)n−(1− 1+

√5

2

)n

√5

= round

(1+√5

2

)n

√5

def fibF1(n):

temp = sqrt(5)

phi = (1 + temp)/2

return round((phi ** n)/temp)

def fibF2(n):

temp = my_sqrt(5)

phi = (1 + temp)/2

return round((phi ** n)/temp)

def my_sqrt(n):

getcontext().prec = 50

temp = Decimal(0)

for x in range (0, 200):

temp = (n-1) / (2 + temp)

return 1 + temp

>>> fibF1(100)

354224848179263111168

>>> fibF2(100)

354224848179261915075

MÁRTON Gyöngyvér 2019, Diszkrét matematika

Page 24: Diszkrét matematika 6. eloadásmgyongyi/DiszkretMat/6_Szamrendszerek.pdfDiszkrét matematika 6. el®adás MÁRTON Gyöngyvér mgyongyi@ms.sapientia.ro Sapientia Egyetem, Matematika-Informatika

Az n-ik Fibonacci szám

Létezik logaritmikus futási idej¶ algoritmus: a feladat visszavezethet® agyorshatványozás algoritmusára:

Fn =

(1 11 0

)n−1

, F5 =

(1 11 0

)4

=

(5 33 2

)ahol meg kell tehát határozni két 2× 2 mátrix szorzatát:(

a bb d

(e ff g

)=

(a · e + b · f a · f + b · ga · f + b · g b · f + d · g

)

fennáll: a · f + b · g == b · e + d · fa hatékonyság végett a mátrixot egy számhármassal lehet ábrázolni, merta mellékátlón az elemek megegyeznek

def szor(t1, t2):

a, b, d = t1

e, f, g = t2

return (a * e + b * f, a * f + b * g, b * f + d * g)

MÁRTON Gyöngyvér 2019, Diszkrét matematika