/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/ /* [ Created with wxMaxima version 0.8.4 ] */ /* [wxMaxima: input start ] */ /* Kurzanleitung zur Benutzung dieser Datei mit dem SW-Werkzeug Maxima: Auswertung eines Befehls durch Hineinklicken und dann shift-Enter druecken. Zuweisung von Variablen mit : ; Variablen muessen nicht extra deklariert werden. Sie gelten ab Benutzung in allen Befehlen mit ihren zuletzt zugewiesenen Werten. Alle Befehle werden in der Reihenfolge ausgewertet, in der sie angeklickt werden (geht auch mehrfach). Es kommt nicht darauf an, in welcher Reihenfolge sie hier stehen. Man kann jederzeit einen Befehl editieren und veraendern und dann wieder auswerten. Das gilt wie ein neuer Befehl. Neue Befehle koennen jederzeit an beliebiger Stelle (Position vorher anklicken) eingefuegt werden. Die Position eines Befehls in dieser Datei spielt aber keine Rolle. Wichtig ist alleine die Reihenfolge der Auswertung. Weitere Erklaerungen ueber Help-Menu von Maxima oder Tutorials im Internet oder auf dem Handout-Server: https://stud.fh-wedel.de/handout/Iwanowski/ComputerAlgebra/maxima%20tutorials/ Befehle, die wie dieser hier nur aus einem Kommentar bestehen, muessen nicht ausgewertet werden. Aber die Auswertung schadet nicht, solange man sich nicht an der incorrect syntax-Fehlermeldung stoert. */; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* ermoeglicht eine Zeitmessung fuer die Auswertung der Befehle */ showtime:true; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* Erklaerung zum kryptographischen Verfahren RSA (fuer interessierte Leser): RSA ist ein private-public-key-Verfahren, das eine Botschaft mit Hilfe einer grossen RSA-Zahl verschluesselt. Die RSA-Zahl muss aus zwei grossen Primfaktoren zusammengesetzt sein. Die Verschluesselung und Entschluesselung verlaufen ueber modulare Arithmetikfunktionen, wobei die RSA-Zahl der oeffentlich bekannte Modul ist. Eine der beiden Funktionen benutzt eine oeffentlich bekannte Zahl, die andere eine geheime. Je nach Anwendung kann man damit Botschaften verschicken, die nur ein bestimmter Empfaenger lesen kann, oder Unterschriften eines bestimmten Signaturgebers ueberpruefen. Die verschluesselte Botschaft ist vor unbefugter Entschluesselung sicher, solange die beiden Faktoren der RSA-Zahl geheim bleiben. Sonst kann sie leicht geknackt werden, weil das grundsaetzliche RSA-Verfahren jedem bekannt ist, siehe Wikipedia. Anmerkung: RSA hat gewisse Anfaelligkeiten. In moderner Kryptographie werden noch sicherere Verfahren verwendet. */ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* die groesste oeffentlich bekannte RSA-Zahl, gilt als sehr sicher gegen Zerlegungsversuche */ rsa2048: 25195908475657893494027183240048398571429282126204032027777137836043662020707595556264018525880784406918290641249515082189298559149176184502808489120072844992687392807287776735971418347270261896375014971824691165077613379859095700097330459748808428401797429100642458691817195118746121515172654632282216869987549182422433637259085141865462043576798423387184774447920739934236584823824281198163815010674810451660377306056201619676256133844143603833904414952634432190114657544454178424020924616515723350778707749817125772467962926386356373289912154831438167899885040445364023527381951378636564391212010397122822120720357; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* testet, ob Primzahl: */ primep(rsa2048); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* faktorisiert eine Zahl: (Achtung: Das hier kann etwas laenger dauern, bei erfolgreichem Ende bei Geheimdienst anheuern!) */ factor(rsa2048); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ n1: 68547645316547382384; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ n1: 6854764531654738238477584303485647309342; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ n2: 25374892834657634858; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ n2: 2537489283465763485875437263475634728348; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* naechste Primzahl groesser n1 */ p1: next_prime(n1); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ p2: next_prime(n2); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ myRSA: p1 * p2; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ primep(myRSA); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* Wenn es keine kleinen Primfaktoren gibt, dauert auch die Faktorisierung nicht so grosser Zahlen lange: */ factor(myRSA); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ factor(n1); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ factor(n2); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* Definition eigener Funktionen, vor dem Benutzen der unten angegebenen Befehle einmal auswerten durch shift-Enter: */ primesBetween (n,m):= block( [p,result], /* local variables */ p: next_prime(n-1), result: [], while p <= m do (result: cons (p, result), p: next_prime(p)), reverse(result)); primesLessThan(n):= primesBetween (2,n); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* Hier kann der Parameter fuer die Primzahlen festgelegt werden: Es sollte mit verschiedenen Werten fuer n gearbeitet werden. */ n: 200; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* Bestimme alle Primzahlen kleiner gleich n: */ primes: primesLessThan (n); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* Anzahl der Zahlen in primes: */ anzahl: length (primes); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* Erklaerung zum naechsten Befehl (fuer interessierte Nutzer, sonst einfach ausfuehren): Hier werden 2 Anweisungen auf einmal ausgefuehrt (getrennt durch ;). % ergibt den Wert der letzten ausgefuehrten Auswertung, numer wertet den exakten Ausdruck numerisch aus. Der Logarithmus ist zur Basis e, in Maxima dagestellt durch %e (analoge Konstantendefinitionen: %pi, %i) */; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* logarithmische Abschaetzung: */ abschaetzung: n / log(n), numer; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ anzahl/abschaetzung, numer; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* Hier kann eine neue Primzahl an p1 zugewiesen werden. Ersetzen Sie 123456789 gerne durch eine andere Zahl */ p1: next_prime(123456789); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ p1: p1Nachfolger; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ p1Nachfolger: next_prime(p1); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ p1Nachfolger - p1; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* Die naechste Zahl ergibt den durchschnittlichen Abstand von p1 zum Nachfolger (jede ln (p1)-te Zahl ist eine Primzahl) Vergleichen Sie mit der Differenz oben */ log(p1), numer; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ /* Die Differenz ist meistens kleiner und kann sogar nur 2 betragen. Ein realistischerer Vergleich ist es, die Anzahl der letzten 10000 Primzahlen bis zu einer Primzahl mit der logarithmischen Schranke zu vergleichen. */ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ anzahlLetzte10000: length (primesBetween(p1-10000,p1)); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ 10000/log(p1), numer; /* [wxMaxima: input end ] */ /* Maxima can't load/batch files which end with a comment! */ "Created with wxMaxima"$