首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual Studio 2015调试

Visual Studio 2015调试
EN

Stack Overflow用户
提问于 2017-07-12 06:04:14
回答 2查看 29关注 0票数 0

我在Visual Basic中有一个严重的编程问题;我想创建一个检查整数是否为素数的程序,并得到以下代码:

代码语言:javascript
复制
Module
    Sub Main()
        Dim a, j As Integer
        Dim prem As Boolean
        Console.Write("Veuillez entrez un entier")
        a = Console.ReadLine()
        For i = 2 To (a - 1)
            j = a Mod i
            If j = 0 Then
                prem = True ' non premier
            End If
            prem = False
        Next
        If prem = False Then
            Console.WriteLine(a & " est premier")
        Else Console.WriteLine(a & "n'est pas  premier ")
        End If
        Console.Read()
    End Sub
End Module

当我测试时,无论输入什么数字,它总是显示它是质数。

当我删除所有代码来尝试其他东西时,它会返回到似乎有问题的前一个项目。

EN

回答 2

Stack Overflow用户

发布于 2017-07-12 06:41:29

您得到相同答案的原因是,当您找到True时,您会继续运行代码。

代码语言:javascript
复制
If j = 0 Then
    prem = True ' non premier
End If

该代码会立即被下一行prem = False否定。

如果要在找到true时停止检查,请执行以下操作

代码语言:javascript
复制
If j = 0 Then
    prem = True
    Exit For
End If

由于prem在默认情况下将为False,因此根本不需要在此处设置它。你可以将你的代码减少到

代码语言:javascript
复制
For i = 2 To (a - 1)
    j = a Mod i
    If j = 0 Then prem = True
Next

然后,您只能根据需要设置prem。当您走出循环时,您可以知道如果它仍然是假的,那么它永远不是true,并且如果您仍然需要在到达True时退出,(在翻译您的注释后我对此表示怀疑-我只是为了完整性而包含它),您可以执行以下If j = 0 Then prem = True : Exit For

票数 0
EN

Stack Overflow用户

发布于 2017-07-12 07:00:07

当你检测到你的数字是质数时,你将在下一条语句中设置prem = false

您也不需要在每个循环中都设置prem = false,因为它已经是false了。

代码语言:javascript
复制
Dim a, j As Integer
Dim prem As Boolean

Console.Write("Veuillez entrez un entier")
a = Console.ReadLine()

Dim i As Integer = 2
While (i < a) AndAlso (prem = false)
    prem = (a Mod i) = 0
    i += 1
End While

If prem = False Then
    Console.WriteLine(a & " est premier")
Else 
    Console.WriteLine(a & "n'est pas  premier ")
End If

Console.Read()

您还可以进行其他一些优化。例如,您只需要检查直到Math.Sqrt(a)的因子,因为如果i*y=a和i> Math.Sqrt(a),y必须是< Math.Sqrt(a)。否则,如果i> Math.Sqrt( a )和y> Math.Sqrt(a),那么i*y>a,因为Math.Sqrt(a)* Math.Sqrt(a) =a。

另一个快速优化是你不需要检查每个偶数,你只需要检查1a%2= 01,然后测试奇数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45045197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档