如何在Visual Basic中打印N个素数

时间:2014-10-10 20:22:05

标签: vb.net-2010

我有这个视觉基本代码来接收用户输入并打印出许多素数。例如,如果用户输入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的初学者。

5 个答案:

答案 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是否给出了非数字值。这个节目是按下按钮开始的吗?