vb 的素数问题,请看题?

来源:百度知道 编辑:UC知道 时间:2024/07/16 05:32:12
素数我编过好多,但最近编时老出错,好像是死循环,出不来了,给看看吧!题目如下:
单击"读数"按钮,把下的in5.txt文件中的一个整数放入Text1;单击"计算"按钮,则计算出大于该数的第1个素数,并显示在Text2中。
Private Sub Cmd2_Click()‘计算
Dim a As Long
a = Val(Text1.Text)
Do While Not sushu(a)
a = a + 1
Loop
Text2.Text = a
End Sub
Public Function sushu(n As Long) As Boolean
Dim flag As Boolean
flag = False
For i = 2 To n - 1
If n Mod i = 0 Then
Exit For
flag = True
End If
Next i
shshu = flag
End Function
谢谢了!

哎。。以下是正确代码,好多错误。。。
Private Sub Cmd2_Click()
Dim a As Long
a = Val(Text1.Text)
Do While sushu(a) '还有这儿,不应该是not
a = a + 1
Loop
Text2.Text = a
End Sub
Public Function sushu(n As Long) As Boolean
Dim flag As Boolean
flag = False
For i = 2 To n - 1
If n Mod i = 0 Then
flag = True '另外传值必须在exit for前面
Exit For
End If
Next i
'shshu = flag你这儿是错的!!害我半个小时找错!,应该是sushu
sushu = flag
End Function

错误很明显,你把Exit For放在flag = True前面了,导致还没有使flag = True就直接退出循环了,所以函数返回值永远都是FALSE

If n Mod i = 0 Then
Exit For
flag = True
End If

改成
If n Mod i = 0 Then
flag = True
Exit For
End If

shshu=flag 改成 sushu=flag
另外,你的算法有问题,i不用到n-1,只需到 sqr(n) 就行了,反正是n的平方根取整,不知道有没有写错。你想啊,一个数能被小于它的一个数整除,就意味着有两个小于它的数相乘后刚好是他,而这两个数必然一个大,一个小,大小最接近就时候就是这个数的平方根,当然,不是每个数都有整数的平方根,所以开方后要取整。