Problem Potenz und Modulo



  • Mein Problem ist, folgender Code erzeugt nicht das von mir erwartete Ergebnis. Setze ich z.B e=7, N=187 und ch=104 ein, so sollte doch eigentlich 179 das Ergebnis sein? Das ist jedenfalls das Ergebnis meiner weitreichenden Rechenkünste :D.

    int e2 = e;
    int erg;
    if (e % 2)
    {;
         erg = ch;
         e2--;
    }
    else
    {
    erg = 1;
    };
    e2 /= 2;
    long int erg2;
    for (int i = 1;i <= e2;i++)
    {
         erg2 = pow(ch,2);
         erg2 = fmod(erg2,N);
         erg *= erg2;
         erg %= N;
    };
    

    Warum ich es mir so umständlich mache? Es können sehr große Zahlen werden, mit denen ich arbeite, und nach dem prinzip geht es a) theoretisch (also aufm papier) b)in andren Sprachen auch (die ich allerdings auch besser beherrschte^^)



  • Nach der if-Verzweigung ist e2 = 1, danach e2 /= 2 mit integern bedeutet e2 == 0. Die Schleife wird nie ausgeführt, erg == ch wie zugewiesen.



  • uppes sry für diesen DÄMLICHEN tippfehler...ist behpen (der fehler, nicht das problem^^)



  • Was genau willst du eigentlich berechnen? Die Schleife berechnet e2-mal (ch*ch)%N* und multipliziert erg mit diesem Wert - das ist auch nicht viel besser als ein for(i=0;i<e;++i) erg=(erg*ch)%N; .

    * btw, für Ganzzahlen brauchst du weder pow() noch fmod() - und diese Berechnungen sind auch in jedem Durchlauf identisch.


Log in to reply