Hey Leute, ich habe versucht mit der Rest und Potenz Funktion Modulo zu berechnen leider ohne Erfolg. Bei mir steht nur #Zahl.
Die Aufgabe lautet:
348^15 mod 1357
Das Ergebnis ist 725.
Hat jemand ne VBA oder Formel Lösung ?
Danke euch trotzdem für alle Tipps
Hi,
die Zahl ist zu groß für Excel.
Hallo,
1357 ist keine Primzahl, sondern 23 * 59. Damit kann man (paper/pencil) die Zahl 348^15 solange kürzen, bis sie in Xl berechenbar wird.
mfg
(Frage:
- wöfür wird das benötigt
- wenn man die Zahlen als Text nutzt, kann man auch mit mehr als 12 Stellen rechnen
)
Hallo,
es gibt eine Zerlegung in eine iterative Formel:
Code:
https://stackoverflow.com/questions/2177781/how-to-calculate-modulus-of-large-numbers
"'348^15 mod 1357
Das Ergebnis ist 725."
1 348 348 '=REST(A4*B4;1357)
348 348 331
331 348 1200
1200 348 1001
1001 348 956
956 348 223
223 348 255
255 348 535
535 348 271
271 348 675
675 348 139
139 348 877
877 348 1228
1228 348 1246
1246 348 725
15 x 348 in Spalte B eintragen, in C den Modulo. In Spalte A der nächsten Reihen wird der Modulo übernomen.
mfg
(19.01.2018, 09:00)Fennek schrieb: [ -> ]- wenn man die Zahlen als Text nutzt, kann man auch mit mehr als 12 Stellen rechnen
Wohl wahr!
(es sind mehr als 12 Stellen (Excel schafft ja schon 15), nämlich 28)
CDec() ist das Zauberwort.
Gruß Ralf
Moin Uwe!
CDec() bezog sich nur auf die mögliche Rechengenauigkeit von 28 Stellen.
Als Beispiel das Schachbrett, auf dem die Anzahl der Reiskörner, mit 1 beginnend, auf jedem Feld verdoppelt wird.
Excel errechnet das falsche:
| A |
1 | falsche Zahl |
2 | 18.446.744.073.709.600.000 |
Mit dem Umweg folgender UDF:
Function Schachbrett() As String
Dim tmpPotenz As Variant
tmpPotenz = CDec(2 ^ 32)
Schachbrett = Format(CStr(CDec(tmpPotenz * tmpPotenz) - 1), "###,###,###,###,###,###,###")
End Function
kann Excel die Pleite des Königs veranschaulichen:
| A |
4 | korrekte Zahl |
5 | 18.446.744.073.709.551.615 |
Zelle | Formel |
A5 | =schachbrett() |
Das hiesige Problem ist ja ein ganz anderes!
Der Modulo-Operator erwartet als Ganzzahl (Dezimalzahlen werden gerundet) einen Long
Dieser ist bereits ab 348^4 überschritten und erzeugt deshalb den Überlauf.
Eine Möglichkeit in Excel ist das von Fennek vorgestellte Gleichungssystem.
Ich bevorzuge bei so etwas zunächst mal Calc.exe :21:
Der jedem Windows-Nutzer bereitgestellte Rechner kommt damit nämlich problemlos klar!
[
attachment=15649]
Gruß Ralf
Und da mich das Problem interessiert, habe ich auf Basis von stackoverflow eine UDF geschrieben:
Function BigModulo&(Basis&, Exponent&, ModOp&)
Dim i&
BigModulo = 1
For i = 1 To Exponent
BigModulo = (BigModulo * Basis) Mod ModOp
Next
End Function
Lösung dann entweder per aufrufendem Makro:
Sub Modulo()
MsgBox BigModulo(348, 15, 1357)
End Sub
oder direkt in einem Tabellenblatt:
| A | B | C | D |
1 | Basis | Exponent | ModOp | Ergebnis |
2 | 348 | 15 | 1357 | 725 |
Zelle | Formel |
D2 | =BigModulo(A2;B2;C2) |