Diskussion:Fermatscher Primzahltest (Programm-Code)

Aus PlusPedia
Wechseln zu: Navigation, Suche

Der Artikel wurde in der Wikipedia nicht in dem Sinne gelöscht, sondern der Quellcode nur in den Artikel Fermatscher Primzahltest verschoben.

1 Quellcode ersetzt

Hier das Programm, das vorher in dem Artikel stand:

Fermatscher Primzahltest (Programm-Code) ist ein aus Fermatscher Primzahltest ausgelagerter Quellcode.

Hier ein Programm dazu: C-Quellcode für ein Programm, das nach dem kleinen Fermatschen Satz, Primzahlen, Pseudoprimzahlen und Carmichaelzahlen unterscheidet:

 /* Ein Programm, zur Ermittlung von Primzahlen, Pseudoprimzahlen */
 /* und Charmichaelzahlen (starke Pseudoprimzahlen) */
 /* Ein extrem langsames Programm */
 
 #include <stdio.h>
 
 int primfeld[400000];
 int tst[400000];
 
 unsigned long modup(unsigned long x, unsigned long y)
 {
   unsigned long mindex, xtemp = 1;
   for(mindex=1;mindex<=(y-1);mindex++)
   {
     xtemp *= x;
     xtemp %=y;
   }
   return(xtemp);
 } 
 
 void main()
 {
   unsigned long index, index2, anzp=1, m, dtm;
   int tm1, tm2, tm3, gtm;
   FILE *prim;
   FILE *pspr;
   FILE *cnbr;
   prim = fopen("prim.dat","w");
   pspr = fopen("pspr.dat","w");
   cnbr = fopen("cnbr.dat","w");
   primfeld[1] = 2;
   for(index=3;index<=4000000;index++)
   {
     tm1 = 0;
     tm2 = 0;
     tm3 = 0;
     /* faktor$ = "" */
     for(index2=1;index2<=anzp;index2++)
     {
       m = modup(primfeld[index2], index);
       tst[index2] = m;
       if (m == 1)
       {
         tm1 = 1;
         tm3++;
       }
       if ( m != 1) { tm2 = 2; }
     }
     gtm = tm1 + tm2;
     if (gtm == 1)
     {
       anzp++;
       primfeld[anzp] = index;
       fprintf(prim,"%d \n",index);
     }
     if (gtm == 3)
     {
       dtm=anzp/2;
       if (tm3 < dtm)
       {
         fprintf(pspr,"%d: ",index);
         for(index2=1;index2<=anzp;index2++)
         {
           m = modup(primfeld[index2], index);
           if (m == 1)
           {
             fprintf(pspr,"%d, ",primfeld[index2]);
           }
         }
         fprintf(pspr,"\n",0);
       }
       if (tm3 >= dtm)
       {
         fprintf(pspr,"%d: ",index);
         for(index2=1;index2<=anzp;index2++)
         {
           m = modup(primfeld[index2], index);
           if (m != 1)
           {
             fprintf(cnbr,"N%d, ",primfeld[index2]);
           }
         }
         fprintf(cnbr,"\n",0);
       }
     }
   }
   fclose(prim);
   fclose(pspr);
   fclose(cnbr);
 }

2 Erläuterungen zum Programm

Da das Programm nicht nur eine Zahl auf ihre Primalität prüft, sondern alle Zahlen von 3 bis Obergrenze abtestet, wird ein Array namens Primfeld bereitgehalten, in dem alle Primzahlen, die so nach und nach gefunden werden, abgelegt werden. Die 2 wird als Primzahl vorgegeben.

Getestet werden die Primzahlkandidaten nur durch die Primzahlen in dem Array.

Die Variablen tm1, tm2, tm3, gtm sind Prüfvariablen:

tm1 = 1 wenn für ein <math>a^{n-1} \mod a = 1</math> gilt.
tm2 = 1 wenn für ein <math>a^{n-1} \mod a <> 1</math> gilt.
tm3 wird jedes Mal um 1 erhöht, wenn die Bedingung für tm1 erfüllt wird.
gtm = tm1 + tm2, woraus folgt:
Wenn gtm = 1 ist, dann ist die zu prüfende Zahl n eine Primzahl
Wenn gtm = 2 ist, dann ist die zu prüfende Zahl n eine ganz gewöhnliche Zahl
Wenn gtm = 3 ist, dann ist die zu prüfende Zahl n eine Pseudoprimzahl
Wenn gtm = 3 ist, und es gilt, dass die Anzahl der gefundenen Pseudoprimbasen größer oder gleich der Hälfte der testenden Primzahlen ist, dann ist die zu prüfende Zahl n eine Carmichael-Zahl.

Obwohl das Programm zu 100% korrekte Primzahlen zurückliefert, ist es weniger als Primzahltest, sondern vielmehr als Sieb für Pseudoprimzahlen und Carmichael-Zahlen geeignet.

3 Init-Quelle

Entnommen aus der: Wikipedia

Autoren: Riemanns Freund , YMS , Andreas aus Hamburg in Berlin, Revolus, Nuuk, Kubieziel, Bananeweizen, P. Birken, Srbauer, Arbol01, Markus Schweiß

Für diesen Artikel fehlt ein Link zur Löschdiskussion und/oder die Kategorie:WikiPedia Deleted
Hier ist die Anleitung zum Finden der Löschdiskussion

--Arbol01 14:08, 13. Dez. 2009 (UTC)

Diesen Artikel melden!
Verletzt dieser Artikel deine Urheber- oder Persönlichkeitsrechte?
Hast du einen Löschwunsch oder ein anderes Anliegen? Dann nutze bitte unser Kontaktformular

PlusPedia Impressum
Diese Seite mit Freunden teilen:
Mr Wong Digg Delicious Yiggit wikio Twitter
Facebook




Bitte Beachte:
Sämtliche Aussagen auf dieser Seite sind ohne Gewähr.
Für die Richtigkeit der Aussagen übernimmt die Betreiberin keine Verantwortung.
Nach Kenntnissnahme von Fehlern und Rechtsverstößens ist die Betreiberin selbstverständlich bereit,
diese zu beheben.

Verantwortlich für jede einzelne Aussage ist der jeweilige Erstautor dieser Aussage.
Mit dem Ergänzen und Weiterschreiben eines Artikels durch einen anderen Autor
werden die vorhergehenden Aussagen und Inhalte nicht zu eigenen.
Die Weiternutzung und Glaubhaftigkeit der Inhalte ist selbst gegenzurecherchieren.


Typo3 Besucherzähler - Seitwert blog counter
java hosting vpn norway