Čtenářská řešení

Od pana Vladimíra Lišky z Pardubic mi přišla velice zajímavě zpracovaná řešení hlavolamů z čísel 34 a 32 - jedná se o řešení psaná v MAC65! Pan Liška píše:


Vážený pane,

posílám Vám svůj ohlas na "Hádanku" z magazínu FLOP č. 34 (Prvočísla). Soubor PC6.COM , v délce 5-ti sektorů je přiložen na disketě.Stovku prvočísel od 2,3,5,...do 523,541 vypočte a vypíše na obrazovku za 6 s. Jen na okraj ke genezi tohoto "fajlu": Sestavený strojový program první verse dal výsledek za 10 s, druhá verse - s trochou triku - byla o 3 sekundy kratší. . Pak jsem vyrobil doplněnou versi, dovolující vypsat volitelně buď první nebo druhou stovku prvočísel: 2..542 za 7s,, 547..1223 za 10s. Přiložená verse, PC6.COM, by mohla byt číslována jako V.3.

Jen stručně k postupu: První 4 prvočísla (2,3,5,7) jsou dosazeny do tiskového bafru ( $6000 až $618F, 400 byte). Na pozici $6191 je 00 jako delimitor, který zabrání výpočtu 101. prvočísla. Testovaná čísla (lichá) stoupají od 9, a nejprve se testují na dělitelnost pěti, pak třemi. Když nejsou takto dělitelná. provádí se vlastní dělení (FDIV $DB28 rutina) nižšími prvočísly. Čísla od 31 do 541 jsou testována dělením prvočísly 7,11,13,17,19,23a 29 a pokud po dělení zůstává zbytek, jsou zapisována do bafru jako prvočísla.

Když už Vám, pane Walla, posílám tuto disketu , naložím na ni - ex post - i řešení faktoriálů (Hádanka z čísla 32). Je to opět strojákový soubor FAK.COM (7 sektorů), a protože je v ML, je kratší a asi 4krát rychlejší, než soubor v TurboBasicu. Dovoluje vypočítat přesný faktoriál libovolného čísla do 255, a to s určením počtu platných cifer.

     Pro srovnání (TB/ML): 99! - 24/6 s
                           50! -  6/1 s

Faktoriál 255! se rovná 0,33508.10 na 505, což ovšem trvá již 56 sekund.

Připojuji též zdrojový program FAK.LM a to jen pro případ, že by se dal uveřejnit jako příklad pro používání aritmetiky BCD v kursu programování v assembleru.

(...)

Vladimír Liška


Obě řešení považuji za velmi dobrá. Myslím si také, že uvedení listingu "FAK.LM" může být přínosné pro programátory. Upozornil bych pouze na to, že pro čísla větší jak 146 nejsou vždy všechny číslice korektní, což zřejmě souvisí s velikostí dekadického řádu, který překračuje 256. Přesto před jeho řešením smekám.

-JW-