Ordnung von 2 modulo p

Neue Frage »

Malcang Auf diesen Beitrag antworten »
Ordnung von 2 modulo p
Hallo mal wieder smile

ich beschäftige mich gerade mit der Frage, die multiplikative Ordnung von modulo ungerade Primzahl zu bestimmen.
Nach dem Satz von Euler-Fermat weiß ich, dass und nach Satz von Lagrange, dass .
Nun bilde ich und schaue, ob ich dort -1 erhalte. Dann weiß ich, die Ordnung ist . Andernfalls führe ich das so weiter.
Gibt es Anforderungen an , die mir das erleichtern? Ich habe mit ienem Skript festgestellt, dass die Werte und überwiegen, aber mehr habe ich nicht erkannt verwirrt
HAL 9000 Auf diesen Beitrag antworten »

Nun, genau damit beschäftigt sich ja der zweite Ergänzungssatz des Quadratischen Reziprozitätsgesetzes: , also für .

Allerdings teile ich nicht deine Ansicht, dass in diesem Fall stets auch gelten muss:

Beispiel : Hier ist , aber .


Was du aus lediglich sicher folgern kannst ist, dass gilt, wobei ein ungerader Teiler von ist.
Malcang Auf diesen Beitrag antworten »

Hallo HAL, danke für deine Zeit!

Zuerstmal zu deiner Anmerkung:
Zitat:
Original von HAL 9000
Allerdings teile ich nicht deine Ansicht, dass in diesem Fall stets auch gelten muss:

Beispiel : Hier ist , aber .


Ja, das ist ein gutes Gegenbeispiel. Vielen Dank dafür. Mein Gedankengang war, dass aus ja folgt. Aber wie dein Beispiel zeigt, lande ich eben nicht nur mit der "Quadratwurzel" bei . Danke.

Du schreibst weiter:
Zitat:
Original von HAL 9000
Nun, genau damit beschäftigt sich ja der zweite Ergänzungssatz des Quadratischen Reziprozitätsgesetzes: , also für .


Kannst du mir da nochmal auf die Sprünge helfen?
Hm...Ich sehe leider nicht den Zusammenhang zwischen Ordnung und quadratischem (Nicht)rest. Deshalb kann ich auch gerade nicht ohne weiteres dieses nachvollziehen:
Zitat:
Original von HAL 9000
Was du aus lediglich sicher folgern kannst ist, dass gilt, wobei ein ungerader Teiler von ist.


Edit:
Ah, mein Ansatz wäre dieser:
Sei . Dann ist , also .
Hm, jetzt fehlt mir noch ein Schubs, denke ich.
HAL 9000 Auf diesen Beitrag antworten »

hast du ja selbst schon festgestellt, damit existiert eine ganze Zahl mit .

Ist gerade, dann folgt daraus aber im Widerspruch zu .
Malcang Auf diesen Beitrag antworten »

Ah ja, vielen Dank, dass sehe ich nun deutlicher. Ich beschäftige mich nun noch eine Weile damit, danke sehr!

Das führt mich aber schlussendlich zu der Frage, wie ich die Ordnung effizient implentieren kann (in meinem Falle: python).
Die naive Idee, die Exponenten einfach hochzuzählen, ist zwar zielführend, aber sicher nicht die beste. Also dachte ich, ich könnte ja auch "runterzählen": Beginne bei , bilde . Wenn das 1 ergibt, habe ich ja zumindest schonmal eine viel niedrigere Obergrenze.
Nun stellt sich aber ja heraus, dass ich im Falle -1 dann eben noch auf andere Teiler zurückgreifen muss.
Auch wenn ich vorher prüfen könnte, ob ich es mit einem geraden oder ungeraden Teiler zu tun habe, so erscheint mir das insgesamt doch sehr aufwändig.

Gibt es eine bessere Möglichkeit?
HAL 9000 Auf diesen Beitrag antworten »

Naja, ein mögliches Vorgehen:

1) Start mit .

2) Untersuche für alle Primteiler von , ob gilt.

3) Gibt es ein solches , dann setze und fahre fort mit 2).

4) Andernfalls ist die gesuchte Ordnung .


Ist bei großen wohl effizienter als die naive Methode. Allerdings sollte es auch nicht so groß sein, dass die Primfaktorzerlegung von erhebliche Schwierigkeiten macht. Augenzwinkern
 
 
Malcang Auf diesen Beitrag antworten »

Danke HAL.

Zitat:
Original von HAL 9000
Allerdings sollte es auch nicht so groß sein, dass die Primfaktorzerlegung von erhebliche Schwierigkeiten macht. Augenzwinkern


Das war genau meine Befürchtung Big Laugh Ich hatte gehofft dass es Möglichkeiten gibt, in denen ich ohne die Primfaktorzerlegung auskomme. Also ein hinreichendes Kriterium dafür, wie die Ordnung berechnet wird. Bisher weiß ich ja nur .
HAL 9000 Auf diesen Beitrag antworten »

In Größenordnungen, wo die Primfaktorzerlegung von Probleme macht, muss man aber nicht ernsthaft mehr über die naive Methode sprechen - schon viel eher nicht mehr.
Malcang Auf diesen Beitrag antworten »

Das war meine Befürchtung.

Danke sehr! Freude
HAL 9000 Auf diesen Beitrag antworten »

Hab mal ein kleines Skript erstellt, was die obige Idee zur Ordnungsberechnung umsetzt:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
import gmpy2, primefac

def ordp(a, p):
    m = p-1
    r = 1
    for q in primefac.primefac(p-1):
        if (q != r):
            mt = m//q
            if (gmpy2.powmod(a, mt, p) == 1):
                m = mt
                r = 1
            else:
                r = q
    return m
In der Hoffnung, dass Generator "primefac" aus dem gleichnamigen Modul (musst du vermutlich nachinstallieren) einigermaßen brauchbar auch für sehr große Zahlen ist.


P.S.: Hab auch sympy.ntheory.factorint ausprobiert, aber das scheint signifikant langsamer zu sein.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »