查找1到1000的素数显示到文本框,瞬间完成
'例子需控件:Command1、Text1
Private Sub Command1_Click()
Dim a() As Long, nStr As String
'Call FindSuShu(18, 100, a, 5) '查找大于17的5个素数存入数组a
Call FindSuShu(1, 1000, a) '查找1到1000之间的所有个素数
'显示到 Text1
For I = LBound(a) To UBound(a)
nStr = nStr & a(I) & " "
Next
Text1.Text = nStr
End Sub
Private Sub FindSuShu(FromS As Long, ToS As Long, Su() As Long, Optional Ge As Long)
'查找位于 FromS 和 ToS 之间的质数(素数),存入数组 Su()
'Ge 表示查找个数, 如果指定 Ge,则忽略 ToS
Dim I As Long, J As Long, SuAll() As Long, S As Long, MaxN As Long
Dim ReS As Long
S = 1
ReDim SuAll(1 To 1): SuAll(1) = 2
ReDim Su(1 To 1)
If FromS <= 2 And ToS >= 2 Then ReS = 1: Su(1) = 2
I = 2
Do
DoEvents
I = I + 1
If Ge < 1 And I > ToS Then Exit Do
MaxN = I ^ 0.5 '比较 I 的一半
For J = 1 To S
If I Mod SuAll(J) = 0 Then GoTo NextI '不是质数
If SuAll(J) > MaxN Then Exit For '是质数
Next J
S = S + 1 '找到质数的总个数
ReDim Preserve SuAll(1 To S)
SuAll(S) = I
If I < FromS Then GoTo NextI
ReS = ReS + 1 '返回质数的总个数
ReDim Preserve Su(1 To ReS)
Su(ReS) = I
If Ge > 0 And ReS >= Ge Then Exit Do
NextI:
Loop
End Sub
'来源:我的QQ
http://new.qzone.qq.com/32063270/blog/1222349880