[elektro] Modulo "szorzás"???
Papp Zoltán
zombi at c2.hu
Mon Sep 22 12:37:21 CEST 2008
2008.09.22. 10:59:37 dátumon Pyrograph Office <office at pyrograph.hu> írta:
> Hello!
>
> Mindenkinek köszönöm az építő jellegű hozzászólásokat, és a jó ötleteket!
>
>> Hát remélem, beválik, kb. 6 órát gyököltem ezen :-)
>
> Zoli, Neked ez megért ennyit? Vagy csupán amolyan "szakmai perverzitás"?
> Azért köszi!
>
> V.
Hali!
Valahol igazad lehet, mindig perverzen szerettem a matekot és az
algoritmusokat :-), és olyan megérzés szinten motoszkált a fejemben, hogy
kell lennie egyszerű megoldásnak, és végülis igazam lett. Csak arra
kellett rájönnöm, hogy 2 osztó (és a két maradéka) összevonható a
legkisebb közös többszörösévé (és egy új maradékká), innentől kezdve
mindegy hány osztód van, mert előbb-utóbb elfogynak. És jó az
algoritmusban az is, hogy sosem léped át számábrázolásilag az eredeti
osztók legkisebb közös többszörösét, továbbá csak összeadást és kivonást
igényel.
Alapvetően egyébként a kínai maradéktétel pont a te problémádra adja a
megoldást, csak az a baj, hogy minden paraméterhez szintén van egy olyan
feladat benne, ahol egy maradékból és egy osztóból kell megtalálnod egy
osztandó számot, ami ráadásul egy alapszám egész számú többszöröse. Tehát
gyakorlatilag számolási igényben majdhogynem visszajutsz az eredeti
problémához, csak egyszerűbben, elemeire bontva. Ráadásul a szorzások
közben számábrázolásilag könnyen átlépheted a meglévő határokat, szóval
mindent összevetve lehet, hogy bonyolultabb (és lassabb) lenne az egész.
Egyébként - ha érdekel - a probléma a következő, ha speciálisan csak a 2
osztó + 2 maradék összevonásából keletkező új maradékot akarom kiszámolni,
akkor a kínai maradéktétel megoldása alapján következő az egyszerűsített
leírás:
Ha d0 és d1 az eredeti osztód, és m0 és m1 a maradék, akkor meg kell
találnod azt a z0 és z1 egész számokat, melyre teljesül, hogy:
(d1*z0) mod d0 = 1
(d0*z1) mod d1 = 1
Az összevont, új osztó ugye a LKT(d0,d1) lesz (relatív prímek esetén
d0*d1).
Ekkor az új maradék:
M=(z0*d1*m0+z1*d0*m1) mod LKT(d0,d1)
Szóval bonyásabb, mint egyszerűen ellépegetni, míg egyenlő nem lesz a két
szám :-) Pláne, hogy a z0 és z1 megkereséséhez megintcsak nincs képlet,
tehát ott is lépegetni kell, belátható módon szintén max. LKT(d0,d1)-ig.
Üdv:
--
Papp Zoltán
OneWay Electronics Kft
Hangszerviz
szkájpi: oneway[aláhúzás]papp[aláhúzás]zoltan
More information about the Elektro
mailing list