我有这个视觉基本代码来接收用户输入并打印出许多素数。例如,如果用户输入5,则输出应为:1,3,5,7,11。这是我的代码:
Dim i, n, input, currentPrime As Integer
Dim Wrap As String = Chr(10) & Chr(13)
' input = TextBox2.Text
currentPrime = 0
txtOutput.Text = "Prime Numbers are : " & Wrap
'Do Until (currentPrime <= input)
For i = 0 To 500
For j = 2 To Fix(i / 2) + 1
If i Mod j = 0 Then
n = 1
End If
Next
If n = 1 Then
n = 0
Else
txtOutput.Text = txtOutput.Text & Wrap & i & " is a prime number " & Wrap
End If
Next
currentPrime += 1
'Loop
End If
请注意输入和我的Do循环已注释掉。这样做是因为如果我尝试使用这种方法,则不打印任何内容,我的程序将锁定。但是,如果我将其评论出来,程序将打印素数499。
有谁知道我可以让这个循环工作的方式?感谢任何帮助,因为我是Visual Basic的初学者。
答案 0 :(得分:1)
你的逻辑是倒退的
do until (currentprime <= input)
如果你的输入是5,那么currentprime从0开始,0 <= 5
为真,然后在那里杀死循环。
do until (currentprime >= input)
是你想要的。 &#34;做这些事情,直到你找到比用户想要更多的素数&#34;。
另外,内部素性测试可以使用一些帮助:
If i Mod j = 0 Then
n = 1
End If
这将检测您是否/何时找到数字的除数(例如,数字不是素数),但是您只是继续测试。您已经证明这个数字是复合的,因此进一步测试没有意义。你不是GlaDOS - 你可以在那时放弃并转到下一个候选人号码。
答案 1 :(得分:1)
试试这样:
Dim i, n, input As Integer
Dim Wrap As String = Chr(10) & Chr(13)
input = TextBox2.Text
txtOutput.Text = "Prime Numbers are : "
For i = 0 To input
For j = 2 To Fix(i / 2) + 1
If i Mod j = 0 Then
n = 1
End If
Next
If n = 1 Then
n = 0
Else
txtOutput.Text = txtOutput.Text & " " & i & " is a prime number." & Wrap
End If
Next
我没有删除代码。但我认为现在正确。
答案 2 :(得分:1)
使用函数来确定数字是否为素数(如果您以后需要该函数,它会有帮助)
Function IsPrime(number As Integer) As Boolean
If number <= 2 Then
Return False
End If
Dim upperLimit As Integer = number ^ 0.5
For i As Integer = 2 To upperLimit
If number Mod i = 0 Then
Return False
End If
Next
Return True
End Function
循环你的nr范围,每次找到一个,添加primesFound
Sub Main()
Dim totalItems As Integer = 100
Dim primesFound As Integer = 0
Dim currentNumber As Integer = 3
While primesFound < totalItems
If IsPrime(currentNumber) Then
Console.WriteLine("{0} is a prime number", currentNumber)
primesFound = primesFound + 1
End If
currentNumber = currentNumber + 2
End While
Console.WriteLine("Done, press any key to exit!")
Console.GetKey()
End Sub
顺便说一句,在我看来,1&amp; 2不是素数nr;),并且检查素数nr应该只从nr 3开始
答案 3 :(得分:1)
这是您需要的代码。我也花了很长时间才弄清楚逻辑并让它一点一点地复杂化,但只是做了一些粗略的页面工作。希望这有帮助!
P.S我也在互联网上寻找程序,但没找到它:) 守则:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j, k, a As Integer
k = InputBox("Enter the Number of First Prime Numbers")
For a = 1 To k
j = Val(TextBox1.Text)
j = j + 1
For i = 2 To j - 1
If j Mod i = 0 Then
j = j + 1
Else
End If
Next
TextBox1.Text = j
TextBox2.Text = TextBox2.Text & " " & j
Next
End Sub
结束班
答案 4 :(得分:0)
你试过了吗?
For i = CurrentPrime To Input
你的do循环应该是&#34; Do While&#34;而不是&#34; Do Until&#34;,但如果你的程序会锁定/崩溃,我想知道你的TextBox2.Text是否给出了非数字值。这个节目是按下按钮开始的吗?