+1 Daumen
1,3k Aufrufe

auf http://www.gerdlamprecht.de/Primzahlen.htm steht die Funktion Prime(x), deren Beschreibung "Die Funktion Prime(x) und ihre Summendarstellung (erzeugt die x. Prinzahl)" lautet.

 

 

Erste Frage: Ich dachte, eine derartige Funktion gibt es nicht? Ich weiß nur, dass die innerste Summe von i=1 bis j die Teileranzahl von j ist.

Zweite Frage: Um sie zu testen habe ich sie mal in ein Programm umgeschrieben, das aber nicht funktioniert. Ich weiß nicht, ob es an der Funktion liegt oder an dem Programmcode.

        Dim Prime As Double = 0
        Dim x As Integer = 2

        Dim sumi As Double = 0
        Dim sumk As Double = 0
        Dim sumj As Double = 0

        Prime += 2
        For k As Integer = 2 To Floor(2 * x * Log(x) + 2)
            sumj = 0
            For j As Integer = 2 To k
                sumi = 0
                For i As Integer = 1 To j
                    sumi += Floor(j / i) - Floor((j - 1) / i)
                Next
                sumj += Floor((2 - sumi) / j) + 1
            Next
            sumk += 1 - Floor((1 / x) * sumj)
            Prime += sumk
        Next
        MsgBox(Prime)

Weiß jemand weiter?

 

Danke

Avatar von
Ach, den Fehler im Code habe ich jetzt gefunden. sumk += 1 - Floor((1 / x) * sumj) muss ausserhalb der äußersten Schleife sein, dann funktioniert es.

Okay, bleibt die erste Frage: Ich dachte so eine Funktion gibt es nicht... Und wenn (anscheinend) doch, warum ist sie nicht allzu bekannt?
Es gibt solche Funktionen, aber keine, die wirklich effizient arbeitet. Die Berechnung mit so einer Formel dauert ewig, deshalb sagt man meistens, dass es keine (wirklich effiziente) gibt. Kannst du auch bei deinem Programm ausprobieren für große x, das dauert schon lange.
Ja, habe ich auch schon gemerkt. Schon bei x = 30 dauert es über eine Sekunde. Ich dachte nur, es läge eine prinzipielle Unmöglichkeit vor, solche primzahlerzeugenden Funktionen aufzustellen... weil doch immer behauptet wird, "es gibt keine Funktion, die die Primzahlen erzeugt", dabei müsste es ja anscheinend eher heißen "es gibt keine effiziente Funktion, die die Primzahlen erzeugt, ineffiziente Funktionen gibt es aber"

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community