2016-09-18 2 views
0

Ich muss die sequentiellen 25 Primzahlen drucken, nachdem ich den Benutzer frage, eine Zahl einzugeben. Der folgende Code druckt tatsächlich Primzahlen, druckt jedoch leere Leerzeichen. Ich kann nicht herausfinden, wie man NUR die Primzahlen und keine Leerstellen drucken kann. Ich habe dies so weit:Drucken von Primzahlen

Public Function IsPrime(value) 
Dim remainder As Double 
Dim rounded As Long 
Dim Max As Long 
Dim j As Long 

IsPrime = 0            
Max = 1 + Int(value/2)       
For j = 2 To Max          
    rounded = Int(value/j)      
    remainder = (value/j) - rounded 

    If remainder = 0 Then 
     Exit For 
    End If 

Next j 

If j = Max + 1 Or value = 2 Then   
    IsPrime = 1 
End If 

If value <= 1 Then 
    IsPrime = 0 
End If 

End Function 



Public Sub printprime() 
Dim x As Integer 
Dim row As Integer 
Dim col As Integer 
Dim j As Integer 
Dim matrix1(1 To 5, 1 To 5) As Integer 


x = InputBox("Please enter a number ") 
j = 1 
For row = 1 To 5 
    For col = 1 To 5 
    If IsPrime(x + j) = 1 Then 
     Cells(row, col) = x + j 
     matrix1(row, col) = Cells(row, col) 
    End If 
    j = j + 1 
    Next col 
Next row 
+0

Ich schlage vor, dass Sie durch das Ausfüllen Zahlen auf nur eine Zeile beginnen. Sie sollten die Spaltennummer nur erhöhen, wenn eine Primzahl gefunden wird. Wenn dies funktioniert, ändern Sie es so, dass es nach Zeile und Spalte gefüllt wird. Tipp: Die Mod-Funktion wird für Letzteres helfen. –

+0

Wo setze ich das Inkrement, um es nur zu inkrementieren, wenn ein Prim gefunden wird? @AndrewMorton – johnbowen

+0

vergesst, ich habe das herausgefunden! @AndrewMorton – johnbowen

Antwort

0

Sie müssen nur am Laufen zu halten und nehmen nur die Primzahlen:

Public Sub printprime() 
    Dim x As Long 
    Dim row As Long 
    Dim col As Long 
    Dim j As Long 

    x = InputBox("Please enter a number ") 

    row = 1 
    col = 1 
    For j = x + 1 To 9999 
     If IsPrime(j) Then 
      Cells(row, col) = j 
      col = col + 1 
      If col = 6 Then 
       col = 1 
       row = row + 1 
      End If 
      If row = 7 Then Exit Sub 
     End If 
    Next j 
End Sub 

enter image description here

+0

Ich muss eine Matrix einbauen, so wie ich es in meinem Beitrag versucht habe. Irgendwelche Hilfe dabei? – johnbowen

+1

ist es besser zu loopen für bis gefunden 20 Primzahl, nicht 9999. Eingangsnummer kann 9000 sein und es kann nicht 20 Primzahl in diesem Intervall finden. Sie können ein Inkrement in isPrime part einfügen. –