Skriptinfos
Information zu den verschieden Algorithmen des Geschwindigkeitsvergleiches
zu Beginn auf dieser Seite.
function modulo_trivial(c_max){
var jetzt = new Date();
var startzeit = jetzt.getTime(); // zur Berechnung der Rechendauer
var p_modulo1; p_modulo1 = new Array(2,3,5,7);
var i, j;
for ( i=11; i<=c_max; i++){
var c_wurzel = Math.floor(Math.sqrt(i))+1; // floor() rundet ab
for ( j=2; j<=c_wurzel; j++) {
if (i % j == 0) break;
else if (j==c_wurzel) p_modulo1.push(i);
}
}
document.vergleich.anzahl1.value = p_modulo1.length; // gibt die Anzahl Primzahlen aus
document.vergleich.zeit1.value = rechenzeit_ermitteln(startzeit);
return false;
}
function probedivision(c_max){
var jetzt = new Date();
var startzeit = jetzt.getTime(); // zur Berechnung der Rechendauer
var p_modulo; p_modulo = new Array(2,3,5,7);
var i, j, hv, c_wurzel;
for ( i=11; i<=c_max; i++){
c_wurzel = Math.floor(Math.sqrt(i))+1; // floor() rundet ab
for (j=0; j<=c_wurzel; j++) {
hv = p_modulo[j];
if (hv > c_wurzel)
{
p_modulo.push(i);
break;
}
else if (i % hv == 0) break;
}
}
document.vergleich.anzahl2.value = p_modulo.length; // gibt die Anzahl Primzahlen aus
document.vergleich.zeit2.value = rechenzeit_ermitteln(startzeit);
return false;
}
function eratosthenes(c_max){
var jetzt = new Date();
var startzeit = jetzt.getTime(); // zur Berechnung der Rechendauer
var p_eras; p_eras = new Array();
var index=0;
var primSieb=new Array();
primSieb[0]=false; primSieb[1]=false;
for (var i=2; i<=c_max; i++){
primSieb[i]=true;
}
for (i=2; i<=c_max; i++){
var hv = c_max/i;
index=i;
for (var j=2; j<=hv; j++) {
index=index+i // entspricht primSieb[i*j]=0;
primSieb[index]=false;
}
}
for (i=2;i<=c_max;i++){
if (primSieb[i]==true) p_eras.push(i);
}
document.vergleich.anzahl3.value = p_eras.length; // gibt die Anzahl Primzahlen aus
document.vergleich.zeit3.value = rechenzeit_ermitteln(startzeit);
return false;
}
function buehler(c_o){
var jetzt = new Date(); //
var startzeit = jetzt.getTime(); // zur Berechnung der Rechendauer
var k;
var pmax; pmax = 0;
var p; p = new Array(); p[0] = 2; // Liste der gefundenen Primzahlen
var psum; psum = new Array(); psum[0] = 0; // Liste der Summen einer gefundenen Primzahl bis zur Wurzel dr Grenzzahl
var prim; // logische Statusvariable, Hilfsvariable
var c_o_wurzel = Math.floor(Math.sqrt(c_o)) + 1; //Nur Primzahlen bis zur Wurzel
for (var i=3; i < c_o; i++)
{
k = 0;
prim = true; // Status wird erst einmal auf wahr gesetzt
while ((k < pmax) && prim && p[k] <= c_o_wurzel)
{
while (psum[k] < i){ // prüfen, ob eine gefundene Primzahl an Stelle k Teiler von i ist
psum[k] = psum[k] + p[k];} // durch fortlaufende Aufsummierung der Primzahl an Stelle k zur Summe an Stelle k
if (psum[k] == i) prim = false; // wenn eine Primzahl an einer Stelle k Teiler von i ist, ist i nicht prim
k++; // die nächst größere Primzahl aus dem Summenarray wird geprüft
} // alle Primzahlen bis zur Wurzel von i sind geprüft
if (prim) // Eintragen einer neu gefundenen Primzahl
{
pmax++; //Array-Zeiger erhöhen
p[pmax] = i; // neue Primzahl am Ende eintragen
psum[pmax]=0; // an gleicher Stelle Summenelement schaffen
}
}
document.vergleich.anzahl4.value = p.length; // gibt die Anzahl Primzahlen aus
document.vergleich.zeit4.value = rechenzeit_ermitteln(startzeit);
return false;
}
function atkin(c_max){
var jetzt = new Date(); //
var startzeit = jetzt.getTime(); // zur Berechnung der Rechendauer
var Zahlenfeld; Zahlenfeld = new Array();
var i, a, b, wurzel_c_max, n, k;
for (i=0; i <= c_max; i++) Zahlenfeld[i] = false;
wurzel_c_max = Math.sqrt(c_max);
for (a = 1; a <= wurzel_c_max; a++){
for (b = 1; b <= wurzel_c_max; b++){
n = 4 * a*a + b*b;
if (n <= c_max && (n%12 == 1 || n%12 == 5)){
if (Zahlenfeld[n]) Zahlenfeld[n] = false;
else Zahlenfeld[n] = true;
}
n = 3 * a*a + b*b;
if (n <= c_max && n%12 == 7){
if (Zahlenfeld[n]) Zahlenfeld[n] = false;
else Zahlenfeld[n] = true;
}
n = 3 * a*a - b*b;
if (a > b && n <= c_max && n%12 == 11) {
if (Zahlenfeld[n]) Zahlenfeld[n] = false;
else Zahlenfeld[n] = true;
}
}
}
for (n = 0; n <= wurzel_c_max; n++) {
if (Zahlenfeld[n]){
for ( k = 1; k * n*n <= c_max; k++) Zahlenfeld[k * n*n] = false;
}
}
Zahlenfeld[2] = true;
Zahlenfeld[3] = true;
var count=0;
for(i=2; i<=c_max; i++){
if(Zahlenfeld[i]==true) count++
}
document.vergleich.zeitAtkin.value = rechenzeit_ermitteln(startzeit);
document.vergleich.anzahlAtkin.value = count; // gibt die Anzahl Primzahlen aus
}