Frage

ich ein Problem habe, dass ich nicht zu lösen scheinen. Ich bin zufällig Zahlen, um zu erzeugen, um zu bestimmen, ob meine Zahlen Relativität prim sind.

Hier ist die Funktion, die mir eine Floating Point Exception gibt:

bool modularExponentiationTest(unsigned long long exponent, unsigned long long modulus)
{
    short index = 0;
    unsigned long long base;
    unsigned long long result;

    do
    {
            result = 1;
            base = rand() % exponent; // <--CAUSED BY THIS

            while (exponent > 0) 
            {
                if (exponent & 1)       
                        result = (result * base) % modulus;
                exponent >>= 1;
                base = (base * base) % modulus;
            }

            if (result != 1)
                return false;
    }while(++index < 10);

    return true;
}

Ich habe Samen zufällig in einer anderen Funktion, indem Sie die folgenden Aktionen ausführen:

 srand(time(NULL));

Vielen Dank für Ihre Hilfe!

War es hilfreich?

Lösung

Sie Verschiebung exponent nach rechts in der while-Schleife, bis es 0
erreichen So zweites Mal erreichen Sie base = rand() % exponent; exponent 0 und Sie haben eine Division durch 0

Andere Tipps

Ist der Wert von exponent Null? Wenn ja, dass eine Division durch Null Ausnahme recht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top