求素数的问题!!!

来源:百度知道 编辑:UC知道 时间:2024/05/23 01:19:12
Private Sub Command1_Click()
Dim i, k As Integer
Dim c As Boolean
For i = 50 To 2 Step -1
c = True
For k = 2 To i / 2
If i Mod k = 0 Then c = False
Next k
If c = True Then
Print i
Exit For
End If
Next i
End Sub
求素数
谁知道为什么For k = 2 To i / 2 让50从1除到50不行吗 ?而且我把 /2删掉 又不能显示了 为什么?

素数就是除1跟本身不能被其他数整除的数字
该程式,C=TRUE 表示是素数
要C=TRUE 就要下面的C=FALSE不被执行
For k = 2 To i / 2
If i Mod k = 0 Then c = False
Next k
象你说的从1除到50的话,因为i MOD 1 =0,会执行C=FALSE
同理 /2 不要,那么i MOD i=0 ,会执行C=FALSE
另外不需要全部的 2<=K<i 全部计算一遍,因为要是能被整除的.其中一个除数肯定在2到i/2之间
另外要说明最好把i/2换成根号i,这样运行次数更少

function IsPrime(ByRef LongNumber)
Dim LongSquare
Dim LongIndex
IsPrime = False
if LongNumber < 2 Then Exit function
if LongNumber Mod 2 = 0 Then Exit function
LongSquare = Sqr(LongNumber)
For LongIndex = 3 To LongSquare Step 2
if LongNumber Mod LongIndex = 0 Then Exit function
Next
IsPrime = True
End function