WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Fermat'scher Primzahltest

 

Inception

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2013, 13:16     Titel: Fermat'scher Primzahltest
  Antworten mit Zitat      
Hallo Community,

habe heute aus Langeweile mal versucht den Fermat'schen Primzahltest in MATLAB umzusetzen.
Nach Fermat gilt: r^(p-1) mod p = 1 , wenn r und p teilerfremd.

Ich lass MATLAB eine ganze, positive Zahl r (zufällig) generieren, welche zu p teilerfremd ist.
Das prüfe ich, in dem ich sage:
Wenn r=0 oder r=1 oder r mod p = 0 , dann erzeuge eine neue Zahl.

Die Aufgabe besteht also darin, MATLAB folgendes rechnen zu lassen:
Code:
erg=mod(r^(n-1),n)

Dann wird geprüft, ob erg 1 oder größer ist.

Das Problem dabei. Es entstehen riesige Zahlen.
Um zu vermeiden, dass ich 'realmax' in MATLAB überschreite habe ich folgendes gemacht.
Code:
xx=r^(n-1);
    if(xx==Inf)
        fprintf('\n Wert ueberschreitet %d \n',realmax)
        break;
    end;


Mein Programm funktioniert bis zur Zahl 17, das ist die letzte Primzahl, die erkannt wird.

Vollständiger Programmcode:
Code:
function Fermat_Primzahltest(n)
% Fermat'scher Primzahltest
% Eine Zahl ist wahrscheinlich Primzahl, wenn gilt a^(n-1) mod n = 1
% dabei gilt: a und n teilerfremd und a Zufallszahl
% Funktionsaufruf: Fermat_Primzahltest(n)

% Zu testende Zahl n
% n=11;
% Pruefen auf n<0,n=0,n=1
if(n==0 || n==1)
        fprintf('\n ++++++++++++++++++++++++++++++++++++++++++++++++++++ ')
        fprintf('\n %d ist keine Primzahl',n)
        fprintf('\n ++++++++++++++++++++++++++++++++++++++++++++++++++++ \n\n')
        return;
else if (n<0)
        fprintf('\n ++++++++++++++++++++++++++++++++++++++++++++++++++++ ')
        fprintf('\n Bitte nur positive Zahlen verwenden')
        fprintf('\n ++++++++++++++++++++++++++++++++++++++++++++++++++++ \n\n')
        return;
    end;
end;

% Zufallszahl von 0 bis 'maxzufall'
maxzufall=10;

% Primzahltest mit 'maxiter' Iterationen und 'zaehler' Durchgaengen
maxiter=1000;
zaehler=1;
for i=1:maxiter
    % Zufallszahl r bestimmen, die zu n teilerfremd ist
    r=randi(maxzufall,1);
    while(r==0 || r==1 || mod(r,n)==0)
        r=randi(maxzufall,1);
    end;
    % Bestimmung von erg
    xx=r^(n-1);
    if(xx==Inf)
        fprintf('\n Wert ueberschreitet %d \n',realmax)
        break;
    end;
    erg=mod(xx,n);
    if(erg~=1)
        fprintf('\n ++++++++++++++++++++++++++++++++++++++++++++++++++++ ')
        fprintf('\n %d ist sicher zusammengesetzt \n Zeuge: %d \n Iterationen: %d',n,r,zaehler)
        fprintf('\n ++++++++++++++++++++++++++++++++++++++++++++++++++++ \n\n')
        break;
    end;
    zaehler=zaehler+1;
end;
zaehler=zaehler-1;
if(zaehler==maxiter)
    fprintf('\n ++++++++++++++++++++++++++++++++++++++++++++++++++++ ')
    fprintf('\n %d ist wahrscheinlich Primzahl \n Iterationen: %d',n,zaehler)
    fprintf('\n ++++++++++++++++++++++++++++++++++++++++++++++++++++ \n\n')
end;

end


Wäre sehr dankbar für hilfreiche Antworten =)


Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 19.04.2013, 20:24     Titel:
  Antworten mit Zitat      
Äh, 17 ist doch keine riesige Zahl?!
Wink

guck mal hier
http://www.mathworks.de/de/help/matlab/ref/uint64.html

oder auch hier
http://www.mathworks.de/matlabcentr.....reader/view_thread/162133
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Inception

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.04.2013, 11:17     Titel:
  Antworten mit Zitat      
Nein, 17 ist keine riesige Zahl Razz

17 ist das letzte korrekte Ergebnis, das MATLAB liefert, danach scheinen die Zahlen in der Berechnung zu groß zu werden, so dass 19 und weitere Primzahlen nicht gefunden werden.

Ich werde deine Links mal ausprobieren (vielen Dank dafür).
Melde mich dann wieder ..
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.