|

楼主 |
发表于 2025-6-27 19:46
|
显示全部楼层
Dim pri(200000000) As Byte
Sub 按钮1_Click()
pritab
End Sub
Sub pritab()
'用字节位筛法生成16亿以内的素数表
Dim i As Long, j As Long, b(8) As Byte, c As Byte, k As Long, l As Long, t As Double
j = 1
t = Timer
For i = 0 To 7
b(i) = j
j = j * 2 '位运算值初始化
Next
For i = 0 To 100020001
pri(i) = 170 '先假设所有奇数都是素数
Next
pri(0) = 172 '0,1不是素数,2是素数
i = 3
While i * i <= 100020001
If (pri(Int(i / 8)) And b(i Mod 8)) > 0 Then
j = i * i
While j <= 100020001
If (pri(Int(j / 8)) And b(j Mod 8)) > 0 Then
c = b(j Mod 8) Xor 255
pri(Int(j / 8)) = pri(Int(j / 8)) And c
End If
j = j + i * 2
Wend
End If
i = i + 2
Wend
k = 0
j = 0
For i = 2 To 100020001
If (pri(Int(i / 8)) And b(i Mod 8)) > 0 Then
If i - l = 2 And i >= 99980001 Then j = j + 1: Text1 = Text1 & l & " " & i & vbCrLf
k = k + 1
l = i
End If
Next
MsgBox "总素数:" & k & ",最大素数:" & l & ",99980001与100020001的孪生素数对:" & j & ",用时:" & Timer - t & "秒"
End Sub
|
|