MmVisual hat geschrieben: So 6. Dez 2020, 10:57
Ja, genau. solche schönen Zahlenreihen lassen sich mit recht einfacher Berechnung wunderbar verschlüsseln.
Hallo MmVisual,
falls Du sie für Verschlüsselung verwenden möchtest, eignet sich besonders der schnelle Primzahltest für sehr große Zahlen mit der Bezeichnung "GNZMillerRabin" und "GNZMRPrimdanach". Er basiert auf dem blitzschnellen Miller-Rabin-Primzahltest für außerordentlich große Zahlen:
https://de.wikipedia.org/wiki/Miller-Rabin-Test
it gibt die Anzahl der Iterationen an. Die Wahrscheinlichkeit, dass eine Zahl, die den Test mit it Interationen besteht und nicht Prim ist, ist (1/4)^it - das geht für einige Iterationen sehr schnell gegen Null.
Da die Demo nicht alle Funktionen für ganze Zahlen umfasst, hier ein Überblick:
function GNZadd(a,b:GNZTyp):GNZTyp; //Gibt die Summe a + b zurueck. Rechnet mit Grossen Natuerlichen Zahlen (GNZ); Zbasis=Zahlenbasis (Dezimalsystem:Zbasis=10)
function GNZsub(Minuent,Subtrahend:GNZTyp):GNZTyp; // WICHTIG: Es muss Minuend>Subtrahend sein!; Rechnet Minuend-Subtrahend.
function GNZmul(a,b:GNZTyp):GNZTyp; //Gibt das Produkt a*b zurueck. Rechnet mit grossen natuerlichen Zahlen.
function GNZmulword(a:dword;b:GNZTyp):GNZTyp; // Wie GNZmul, nur ist a vom Typ dword
function GNZakleinerb(a,b:GNZTyp):boolean; inline; // Prueft, ob a kleiner ist als b
function GNZagleichb(a,b:GNZTyp):boolean; inline; // Prueft, ob sich a und b gleichen.
function GNZdiv(Divident, Divisor:GNZTyp):GNZTyp; //dividiert Divident durch Divisor und gibt das Ergebnis zurueck
function GNZmod(Divident, Divisor:GNZTyp):GNZTyp; //Gibt Divident mod Divisor zurueck
function GNZggt(a,b:GNZTyp):GNZTyp; inline; //Wie ggt, nur fuer grosse natuerliche Zahlen (GNZ)
function GNZkgv(a,b:GNZTyp):GNZTyp; inline; //Wie kgv, nur fuer GNZ
function GNZistgerade(zahl:GNZTyp):boolean; inline; //Prueft, ob zahl mod 2 = 0
function GNZPotenz(Basis,Exponent:GNZTyp):GNZTyp; //Gibt Zahl^Exponent zurueck. Nach einem im Internet gefundenen Algorithmus
function GNZPotenzMod(Basis,Exponent,Modulo:GNZTyp):GNZTyp; //Rechnet Basis^Exponent mod Modulus.
function GNZFakultaet(nFak:dword):GNZTyp; // Gibt n! zurueck
function GNZIstPrim(zahl:GNZTyp):boolean; //Wahr, wenn zahl Primzahl
function GNZMillerRabin(zahl:GNZTyp; it:word):boolean; //Miller-Rabin Primzahltext. Wenn Zahl Test besteht: Mit Wahrscheinlichkeit (1/4)^it Primzahl.
function GNZMRPrimdanach(zahl:GNZTyp; it:word):GNZTyp; //Bestimmt die nach zahl nächste Primzahl.
function GNZZufall(Obergrenze:GNZTyp):GNZTyp; // Gibt eine Zufallszahl wieder, die kleiner ist als Obergrenze.
function GNZeins:GNZTyp; // Gibt 1 zurueck
function GNZnull:GNZTyp; // Gibt 0 zurueck
Die GNURZ enthält keine bekannten Bugs. Im Ordner von Andi auf Github befindet sich auch eine assembleroptimierte Variante, die allerdings noch BETA ist und nicht den vollen Funktionsumfang hat.
Liebe Grüße, Euklid