vb中判断一个数是不是素数的问题

来源:百度知道 编辑:UC知道 时间:2024/04/28 21:12:38
Dim i As Integer, m As Integer
m = InputBox("")
For i = 2 To m - 1
If m Mod i = 0 Then Exit For
Next i
If i >= m Then
Print m; "是素数"
Else
Print m; "不是素数"
End If
程序中用条件i >= m来确定m是否为素数,为什么?i不是2 to m-1 吗?
此外对于
Option Explicit
Dim i As Integer
Dim x As Integer

Private Sub c1_Click()
x = Val(t1.Text)
For i = 2 To x \ 2
If x Mod i = 0 Then Exit For
Next
If i = x \ 2 + 1 Then
MsgBox Str(x) + "是素数!"
Else
MsgBox Str(x) + "不是素数!"
End If
End Sub

Private Sub c2_Click()
Unload Me
End Sub

Private Sub c3_Click()
t1.Text = ""
t1.SetFocus
End Sub
为什么还要判断i=x\2+1

循环原理,i从2开始递增,每次进入循环前比对i是否大于m-1,当i取到m时,自动退出循环(除非执行到Exit For)。

所以,i>=m是用来判断循环是自动结束还是Exit For结束。自动结束,表示一直不能满足m Mod i = 0条件,也就是素数。否则就是有数字能满足条件,就不是素数
------------------------------------------------------------
x\2+1是对算法的优化,用来减少循环次数,提高程序运行效率。
偶数都能被2整除,所以只考虑奇数
比方判断15是不是素数,循环上限到8就足够了,比到14少了6次循环
判断19是不是素数,循环上限到10就足够了,比到18少了8次循环

最少的循环次数是将x的平方根用进一法取整
比方判断16是不是素数,循环上限到4就足够了
比方判断17是不是素数,循环上限到5就足够了
不过计算机处理平方根效率更低,所以就用了x\2+1