2014-02-17 29 views
1

下面的代碼列出了所有質數從1到10:如何檢查素數

Dim primeN As Integer 
Dim primeI As Integer 
Dim primeFlag As Boolean 

For primeN = 1 To 10 
    primeFlag = True 
    For primeI = 2 To primeN/2 
     If primeN Mod primeI = 0 Then 
     primeFlag = False 
     End If 
    Next 
    If primeFlag Then 
     Console.WriteLine(primeN) 
    End If 
Next 
Console.ReadLine() 

我怎樣才能改變它,以便它讀取用戶輸入,然後檢查它是否是一個素數?

回答

0

創建一個返回true或false標誌的函數。

這裏是我的模塊,素性產生隨機數然後檢查:

Module PrimeNumber 

    Sub Main() 
     Dim numbers As New ArrayList 
     For i As Integer = 1 To 20 
      numbers.Add(CInt(Math.Ceiling(Rnd() * 1000000))) 
     Next 

     For Each int As Integer In numbers 
      Console.WriteLine("{0} -> {1}", int, PrimeNumberCheck(int)) 
     Next 

    End Sub 

    Public Function PrimeNumberCheck(ByVal number As Integer) As Boolean 

     Dim primeI As Integer 
     Dim primeFlag As Boolean 

     primeFlag = True 
     For primeI = 2 To number/2 
      If number Mod primeI = 0 Then 
       Return False 
      End If 
     Next 

     Return primeFlag 

    End Function 

End Module 

輸出:

Console Output

0

你幾乎沒有。而不是循環,只需獲取用戶輸入並將其放入該變量中即可。然後稍微改變一下你的消息。

代碼:

Dim primeN As Integer 
Dim primeI As Integer 
Dim primeFlag As Boolean 

primeN = Int32.Parse(Console.ReadLine()) 

primeFlag = True 
For primeI = 2 To primeN/2 
    If primeN Mod primeI = 0 Then 
     primeFlag = False 
    End If 
Next 
If primeFlag Then 
    Console.WriteLine("Is prime") 
Else 
    Console.WriteLine("Is not prime") 
End If 

Console.ReadLine() 

像其他人建議,把邏輯的方法將是一個不錯的主意。

-1
Sub generateprimenumbersbetween() 
starting_number = 99990 'input value here 
last_number = 99999 'input value here 
primenumbers = "" 
For a = starting_number To last_number 
    For b = 2 To a 
     If a - b * Int(a/b) = 0 And a <> b Then 
      Exit For 
     Else 
      If a = b Then 
       primenumbers = primenumbers & " " & a 
      End If 
     End If 
    Next b 
Next a 
MsgBox primenumbers 
End Sub 

Function primenumbersbetween(starting_number, last_number) 
primenumbers = "" 
For a = starting_number To last_number 
    For b = 2 To a 
     If a - b * Int(a/b) = 0 And a <> b Then 
      Exit For 
     Else 
      If a = b Then 
       primenumbers = primenumbers & " " & a 
      End If 
     End If 
    Next b 
Next a 
primenumbersbetween = primenumbers 
End Function 

'to check if a number is prime 
Sub ISPRIME() 
number_to_be_checked = 102 'input value here 
For b = 2 To number_to_be_checked 
    If number_to_be_checked - b * Int(number_to_be_checked/b) = 0 And _ 
    number_to_be_checked <> b Then 
     MsgBox "Not Prime. Divisible by " & b 
     Exit Sub 
    Else 
     If number_to_be_checked = b Then 
      MsgBox "Prime" 
     End If 
    End If 
Next b 
End Sub 

'to check if a number is prime 
Function ISPRIME2(number_to_be_checked) 
For b = 2 To number_to_be_checked 
    If number_to_be_checked - b * Int(number_to_be_checked/b) = 0 And _ 
    number_to_be_checked <> b Then 
     ISPRIME2 = "Not Prime. Divisible by " & b 
     Exit Function 
    Else 
     If number_to_be_checked = b Then 
      ISPRIME2 = "Prime" 
     End If 
    End If 
Next b 
End Function 
0

這是我最快的VBA代碼來檢查一個數字是否是質數。

Sub ISPRIME() 
Dim number_to_be_checked As Long 
Dim c As Long 
Dim b As Long 
number_to_be_checked = 2000000000 'input value here 
c = Round(Sqr(number_to_be_checked)) + 1 
If number_to_be_checked = 1 Then 
    MsgBox "Not Prime" 
Else 
    For b = 2 To c 
     If number_to_be_checked Mod b = 0 And c <> b Then 
      MsgBox "Not Prime. Divisible by " & b 
      Exit Sub 
     Else 
      If b = c Then 
       MsgBox "Prime" 
       Exit Sub 
      End If 
     End If 
    Next b 
End If 
End Sub