Clever-Excel-Forum

Normale Version: Primzahlen und Primquadrate
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Gibt es in Excel eine Funktion, die die Anzahl der Primquadrate kleiner einer Zahl x angibt?

Was ist ein Primquadrat. 7 ist eine Primzahl, 49 das dazugehörige Primquadrat.

Bitte nicht so eine riesengrosse Formel, sondern was Einfaches!
Hola,
dann schreib die Primzahlen untereinander, daneben das jeweilige Quadrat und zähle mit Zählenwenn() wieviele dieser Quadrate kleiner als X sind.
Gruß,
steve1da
herber.de/excelformeln/pages/eine_Liste_aus_Primzahlen_erzeugen.html

A1:A5: ={2;3;5;7;11}
A6[:A2225]: =LET(n;50;
x;SEQUENZ(n;;A5+1);
y;SEQUENZ(AUFRUNDEN((A5+n)^0,5;0)-1;;2);
MIN(WENN(MMULT((REST(x;MTRANS(y))=0)*1;WENN(y;1))=0;x)))


Will man höher als die 2225. Primzahl (19609) gehen, muss man n=50 erhöhen. Außerdem beginnt man z.B. mit n=500 in A10: mit dem Bezug auf A9: 23 statt A5: 11. Die Rechenzeit steigt von 2-3 auf ca. 30-120 Sekunden (bei 8 Prozessor-Threads), wenn man bis A10000: 104729 herunterkopiert.

A1:A9: ={2;3;5;7;11;13;17;19;23}

Ich habe nicht überprüft, ob die resultierende Primzahlenliste A6:A2225 oder A10:A10000 stimmt. Die Funktion aus dem Link habe ich auf XL365 angepasst.
Danke, ich probier erst mal aus ...
In VBA:
n = höchste Wert
Hier max 20 sek. bei >10^6 Primzahlen

Code:
Sub M_snb()
  Dim n As Long, j As Long, y As Long, t As Long, sn() As String
  t1 = Timer

  n = 15 * Rows.Count
  p = Int(n / (Log(n) - 2))
  ReDim sn(1 To n)
   
  For j = 1 To n Step 2
    sn(j) = j
  Next
 
  For j = 2 To p
    If sn(j) <> "~" Then
      For jj = j + j To UBound(sn) Step j
        sn(jj) = "~"
      Next
    End If
  Next
   
  With CreateObject("New:{8BD21D20-EC42-11CE-9E0D-00AA006002F3}")
    .List = Filter(sn, "~", 0)
    ActiveSheet.Cells(1).Resize(.ListCount) = .List
  End With

  MsgBox Timer - t1
End Sub
VBA hier sicherlich die beste Alternative!