【CBM666 的素数 [质数]】    '补充素数之个数 最近不下10来个帖都在问 素数, 特此 置顶 数天   '大于1,并且除1和它本身外没有其他因数的自然数叫素数(或质数)   '自然数中,2是最小的素数,除2以外,所有的偶数都不是素数.   '如它的各位数字任意调换后仍为素数,则称为绝对素数   '只要使用2到该数的平方根之间的所有数去除这个数,就可以判断其是否素数   '2,100 是2---100之间,100--500 改为 Call chkss(100, 500) 即可   '点击窗体得到结果   Dim i%, j%, tcount%, tsum&, jj!, ss As Boolean  Private Sub Form_Load()      Me.AutoRedraw = True  End Sub  Private Sub Form_Click()      tsum = 0: tcount = 0      Call chkss(2, 100)  End Sub  Sub chkss(stnum%, endnum%)      For i = stnum To endnum         jj = Int(Sqr(i))         ss = False         For j = 2 To jj            If i Mod j = 0 Then ss = True: Exit For         Next j         If ss = False And i > 1 Then Print i: tsum = tsum + i: tcount = tcount + 1      Next i      MsgBox "素数的个数:" & Str(tcount) & Chr(10) & "总和:" & CStr(tsum)  End Sub      贴子相关图片:     作者: cbm666   2007-7-3 16:32   回复此发言       --------------------------------------------------------------------------------   2 回复:【CBM666 的素数 [质数]】    太麻烦了,这是我写的计算,两个数之间素数的个数:   Private Sub Form_Load()   Dim a%, b%, c%, i%, s%   l1: a = Val(InputBox("请输入起始数字"))   b = Val(InputBox("请输入末数字"))   If b < a Or b = 0 Then MsgBox "输入有误,错误为:起始数<末数字": GoTo l1   If a = 1 Then a = a + 1   If a = 0 Then a = a + 2   s = b - a + 1   For i = a To b    c = CInt(Sqr(i))    For j = 2 To c Step 1    If i Mod j = 0 Then    s = s - 1    Exit For    End If    Next j   Next i   msgti$ = "数字" & Str(a) & "与数字" & Str(b) & "之间素数的个数为" & Str(s) & "个"   MsgBox (msgti)   Unload Me   End Sub   原作: 斌……斌         作者: cbm666   2007-7-3 16:33   回复此发言       --------------------------------------------------------------------------------   3 回复:【CBM666 的素数 [质数]】    Option Explicit  Private Sub Command1_Click()   Dim a() As Long   a = FindPrime(500000) '0-50万 以内的素数  End Sub  Public Function FindPrime(ByVal n As Long) As Long()   Dim IntList() As Long, Ulen As Long, PrimeList() As Long   Dim i As Long, j As Long      '------------------------------------------   Dim t1 As Single, t2 As Single '测速代码   t1 = Timer   '------------------------------------------   Ulen = n - 1   ReDim IntList(n) As Long   For i = 2 To n: IntList(i - 1) = i: Next      For i = 2 To Int(Sqr(n))   If IntList(i - 1) <> 0 Then   j = i * i   While j <= n   If IntList(j - 1) <> 0 Then   IntList(j - 1) = 0: Ulen = Ulen - 1   End If   j = j + i   Wend   End If   Next      j = 0   ReDim PrimeList(Ulen - 1) As Long      For i = 2 To n   If IntList(i - 1) <> 0 Then   PrimeList(j) = IntList(i - 1): j = j + 1   End If   Next   FindPrime = PrimeList      '------------------------------------------   t2 = Timer '测速代码   MsgBox Format((t2 - t1) * 1000, "0.000 ms")   '------------------------------------------  End Function         作者: 59.172.190.*  2007-7-3 18:56   回复此发言       --------------------------------------------------------------------------------   4 回复:【CBM666 的素数 [质数]】    '补充素数之和  Private Sub Form_Load()  Dim a%, b%, c%, i%, s%  l1: a = Val(InputBox("请输入起始数字"))  b = Val(InputBox("请输入末数字"))  If b < a Or b = 0 Then MsgBox "输入有误,错误为:起始数<末数字": GoTo l1  If a = 1 Then a = a + 1  If a = 0 Then a = a + 2  For i = a To b  s = s + i  Next i  For i = a To b   c = CInt(Sqr(i))   For j = 2 To c Step 1   If i Mod j = 0 Then   s = s - i   Exit For   End If   Next j  Next i  msgti$ = Str(a) & "与" & Str(b) & "之间所有素数的和为" & Str(s)  MsgBox (msgti)  Unload Me  End Sub      
|