[英]Visual Studio 2015 debugging
我在Visual Basic中编程遇到严重问题; 我想创建一个检查整数是否为素数的程序,并获得以下代码:
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
当我测试时,无论输入什么数字,它始终表明它是质数。
当我删除所有代码以尝试其他方法时,它可以返回到似乎有问题的上一个项目。
得到相同答案的原因是,当找到True
时,您将继续运行代码。
If j = 0 Then
prem = True ' non premier
End If
下一行prem = False
立即使该代码无效。
如果要在找到真值时停止检查,请执行以下操作
If j = 0 Then
prem = True
Exit For
End If
看到prem在默认情况下将为False,因此根本不需要在此处进行设置。 您可以将代码减少为
For i = 2 To (a - 1)
j = a Mod i
If j = 0 Then prem = True
Next
然后只能根据需要设置权限。 当您跳出循环时,您可以知道它仍然为False,并且如果您仍然需要在达到true时退出,那么它就永远不会为True(在翻译您的评论后,我对此表示怀疑-我只是将其包括在内为了完整性),您可以执行以下操作: If j = 0 Then prem = True : Exit For
AS @Fabulous指出,一旦您检测到数字为质数,就在下一条语句中设置prem = false
。
您也不需要在每个循环中都设置prem = false
,因为它已经是false了。
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然后测试奇数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.