große ergebnisse

  • ich will folgende rechnung in meinem programm machen lassen
    (230911 hoch 1721) mod 263713
    leider will er dies nicht machen und gibt nur -1.#IND zurück
    ich denke mal es leigt an der potenzierung denn das endergebniss beträgt nur 1715

    Ich hoffe ihr könnt mir helfen

  • Das Ergebnis stimmt, es dauert aber ca. 20 Minuten :rofl:

    Spoiler anzeigen
    [autoit]

    ;~ (230911 hoch 1721) mod 263713 = 1715
    #include 'BigNum.au3'

    [/autoit] [autoit][/autoit] [autoit]

    Local $Ergebnis = 230911

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To 1720
    $Ergebnis = _BigNum_Mul($Ergebnis, 230911)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"", _BigNum_Mod($Ergebnis, 263713))

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • LIBGMP ftw ;) Innerhalb von nur einer Sekunde das Ergebnis:
    (230911 hoch 1721) mod 263713
    =
    1715

    Hier die DLL und ein paar FUnktionen: https://autoit.de/index.php?page…75143#post75143
    Und der Code, den ich verwendet hab:

    Spoiler anzeigen
    [autoit]

    ; (230911 hoch 1721) mod 263713
    $start = _BigInt_Load("230911", 10)
    $hochzahl = 1721

    [/autoit] [autoit][/autoit] [autoit]

    $ergebnis = _BigInt_Pow($start, $hochzahl)
    _BigInt_Clear($start)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "ZwischenErgebnis", "(230911 hoch 1721)" &@CRLF&"="&@CRLF& _BigInt_Print($ergebnis, 10))

    [/autoit] [autoit][/autoit] [autoit]

    $mod = _BigInt_Load("263713", 10)

    [/autoit] [autoit][/autoit] [autoit]

    $endergebnis = _BigInt_Mod($ergebnis, $mod)
    _BigInt_Clear($ergebnis)
    _BigInt_Clear($mod)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "Ergebnis", "(230911 hoch 1721) mod 263713" &@CRLF&"="&@CRLF& _BigInt_Print($endergebnis, 10))
    ;~ ConsoleWrite(_BigInt_Print($result, 10) & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    _BigInt_Clear($endergebnis)

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]


    //Edit: noch mit libgmp 4.2.4, ich kompiliere grad 4.3.1 kann aber noch ne halbe stunde dauern :P

    Einmal editiert, zuletzt von progandy (2. September 2009 um 18:15)

  • Hey cool danke für eure antworten.
    Also die 20 minuten methode mit BigNum ommt für mich leider nicht in frage xD
    Und ja hat was mit RSA zu tun ;)
    @progandy
    Hm also mit dem code den du angegeben hast komm ich auf 2 xD

    [autoit]

    #include <libGMP.au3>
    $start = _BigInt_Load("230911", 10)
    $hochzahl = 1721

    [/autoit][autoit][/autoit][autoit]

    $ergebnis = _BigInt_Pow($start, $hochzahl)
    _BigInt_Clear($start)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    MsgBox(0, "ZwischenErgebnis", "(230911 hoch 1721)" &@CRLF&"="&@CRLF& _BigInt_Print($ergebnis, 10))

    [/autoit][autoit][/autoit][autoit]

    $mod = _BigInt_Load("263713", 10)

    [/autoit][autoit][/autoit][autoit]

    $endergebnis = _BigInt_Mod($ergebnis, $mod)
    _BigInt_Clear($ergebnis)
    _BigInt_Clear($mod)

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "Ergebnis", "(230911 hoch 1721) mod 263713" &@CRLF&"="&@CRLF& _BigInt_Print($endergebnis, 10))
    ;~ ConsoleWrite(_BigInt_Print($result, 10) & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    _BigInt_Clear($endergebnis)

    [/autoit]


    Wäre cool wenn die Funktion mir das Ergebnis in einer sekunde liefern würde. noch besser wenns richtig ist^^
    kannst du mir sagen was ich ändern muss?

    // die binäre exponantion wäre auch cool da ich dann keine dll lib einbauen müsste.(möchte dass alles so minimal wie möglich halten)
    auf dieser seite sind algorithmen angegeben aber irgendwie sind die fehlerhaft (zb. die letzte hat 3 end befehle aber nur 2 schleifen)
    http://www2-fs.informatik.uni-tuebingen.de/~reinhard/kryp…an/2.3.3.d.html


    soweit hab ich den letzten interpretiert. aber irgendwie funktioniert das noch nicht

    Einmal editiert, zuletzt von dust997 (2. September 2009 um 20:30)

  • du musst die libgmp natürlich noch aufräumen, also was löschen ;)
    Zeile 56 ($int = _BigInt_Load(2, 10))
    bis
    Zeile 130 ;) mpq_... functions: for fractions, no examples)

    und hier noch eine neue Funktion:

    Spoiler anzeigen
    [autoit]

    ;Beispiel:
    ; (230911 hoch 1721) mod 263713
    $start = _BigInt_Load("230911", 10)
    $hochzahl = 1721
    $mod = _BigInt_Load("263713", 10)

    [/autoit] [autoit][/autoit] [autoit]

    $ergebnis = _BigInt_Pow_Mod($start, $hochzahl, $mod)

    [/autoit] [autoit][/autoit] [autoit]

    _BigInt_Clear($start)
    _BigInt_Clear($mod)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "Ergebnis", "(230911 hoch 1721) mod 263713" &@CRLF&"="&@CRLF& _BigInt_Print($ergebnis, 10))

    [/autoit] [autoit][/autoit] [autoit]

    _BigInt_Clear($ergebnis)
    ;----------------------------------------------------------------
    ; Funktion:
    ; Power an Modulo
    ; Prog@ndy
    Func _BigInt_Pow_Mod(ByRef $int1, $exponent, ByRef $mod)
    If @error Then Return SetError(4, 0, 0)
    If Not IsDllStruct($int1) Then Return SetError(2, 0, 0)
    If Not IsDllStruct($mod) Then Return SetError(4, 0, 0)
    If $exponent > 4294967295 Then Return SetError(3,0,0)
    Local $resint = _BigInt_Init()
    Local $return = DllCall($__LibGMP_DLL, "none:cdecl", "__gmpz_powm_ui", "ptr", DllStructGetPtr($resint), "ptr", DllStructGetPtr($int1), "ulong", $exponent, "ptr", DllStructGetPtr($mod))
    If @error Then Return SetError(1, _BigInt_Clear($resint), 0)
    Return $resint
    EndFunc ;==>_BigInt_Pow_Mod

    [/autoit]

    //Edit: und zu dem anderen Code: lesen hilft :P
    $x = Mod($x ^ 2,$n)

  • tippfehler xD
    jetzt funktionierts und schnell^^ damit bin ich dann mit den funktionen fertig :D
    jetzt fehlt nurnoch GUI
    Danke an alle die mir geholfen haben :D