Zkus makro:
Function BigMod(A As Long, B As Long, C As Long) As Long Dim X As Long X = A mod C While B > 1 X = ((A mod C) * X) mod C B = B - 1 Wend BigMod = X End Function
Zavoláš jej =BigMod(A;B;C) místo =mod(A^B;C)
Function BigMod(A As Long, B As Long, C As Long) As Long
Dim X As Long
X = A mod C
While B > 1
X = ((A mod C) * X) mod C
B = B - 1
Wend
BigMod = X
End Function
Zavoláš jej =BigMod(A;B;C) místo =mod(A^B;C)
]]>Pokud někdy něco podobného zkouším, použiju bc.
]]>PS: neni vam znamo zda existuje nejake rozsireni (extensions) ktere by snad tuto limitaci zvedalo?
]]>V případě modula platí jednoduché:
ab mod m = ((a mod m)*(b mod m)) mod m
Předpokládám, že pokud se Drnda problematice věnuje, tak elementární vztahy zná.
=MOD(MOD(22^10;116)*MOD(22^10;116)*MOD(22^5;116);116) = 64
=MOD(MOD(22^10;116)*MOD(22^10;116)*MOD(22^10;116);116) = 20
Jinou cestou je použít simulaci součinu (podílu) mnohočlenu. Tedy rozebrat do jednotlivých buněk dílčí součiny, nebo podíly. Podobně to děláme když násobíme, nebo dělíme na papíru velká čísla tedy pod sebe. To lze udělat v sešitě také "vedle sebe". Další operace jsou sice zkomplikovány, ale pro modulo a podobné jednoduché zadání to asi stačí. Zobrazení můžeme udělat v jedné buňce jen jako textový řetězec. Pro Vaše účely bych doporučil právě toto.
Další cestou je použití logaritmů. Ty byly právě kvůli podobným potížím vynalezeny nejméně v 16. století na dvoře Rudolfa II švýcarským matematikem (jméno mi vypadlo). Je ale možné, že se k takovým účelům používal i algoritmus Gelosia.
Hledal jsem na internetu a našel jsoem stránku kde bylo možné vygenerovat faktoriál až 2^40000. Já jsem testoval jenom pro zajímavost Calc. Pomocí logaritmu lze obsluhovat ještě čísla do 2^3000 pak ale prostý logaritmus se základem "e" také klekne. Je sice možné vytvořit logaritmus s jiným základem, nebo logaritmovat logaritmy ap, to jsem ale netestoval.
Calc ale počítá na 16 platných číslic (zobrazuje 15)
22^25 = 3635524038174210000000000000000000
zbývající čísla zahodí.
Bohužel není to chyba ale vlastnost.
]]>Jedná se LO Calc 5.0.3.2
tak například:
calc říka ze MOD(22^25;116) = 28, wolframalpha dá správný výsledek 64 http://www.wolframalpha.com/input/?i=22^25+modulo+116
calc říka ze MOD(22^30;116) = 16, wolframalpha dá správný výsledek 20 http://www.wolframalpha.com/input/?i=22^30+modulo+116
Podle informací od čtenáře "neutr" jsem na rozpacích jestli bych neměl sešit donutit přejít do nějakeho jiného režimu, ale nevím jak. Pro úplnost ještě nahraju i celý sešit, snad to nějak pomůže. Je sice zajímavé že jsou i případy kdy se společný D-H klíč vzácně shoduje jako např. když se použijí g=22, p=116, a=3, b=6. No a to je na tom to zajimave že mi není známo kde se ztrácí calc, nebo kde jsem to já kdo porušil nejaky maximálni rozsah nebo pravidlo calcu.
...
2. Číslo =82^7 (= 24928547056768) ještě spadá do rozsahu Long Integer. To znamená že je menší nežli =2^1024 (Od tohoto rozsahu -včetně- už počítač není schopen počítat. Vyhodí #NUM).3. Výpočty probíhají pomocí lg - přirozeného logaritmu se základem "e" 2,71... což znamená, že zde vzniká nepřesnost v podílu. V sešitě je funkce LN() což je přirozený logaritmus. Jeho opakem je funkce EXP(). tato funkce pracuje s formátem čísla Double.
...