|
|

楼主 |
发表于 2026-9-17 06:57
|
显示全部楼层
Dim pri(200000000) As Byte
Sub Command1_Click()
pritab
End Sub
Sub pritab()
'用字节位筛法生成16亿以内的单个偶数的拆分素数对的个数,改了一下可能是可以算到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
w = Val(Text1)
For i = 0 To 7
b(i) = j
j = j * 2 '位运算值初始化
Next
For i = 0 To 200000000
pri(i) = 170 '先假设所有奇数都是素数
Next
pri(0) = 172 '0,1不是素数,2是素数
i = 3
While i * i <= w
If (pri(Int(i / 8)) And b(i Mod 8)) > 0 Then
j = i * i
While j <= w
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 w / 2
If (pri(Int(i / 8)) And b(i Mod 8)) > 0 Then
l = w - i
If (pri(Int(l / 8)) And b(l Mod 8)) > 0 Then j = j + 1: Text3 = Text3 & i & " + " & l & vbCrLf
k = k + 1
l1 = i
End If
Next
Text2 = w & "其1/2内的总素数:" & k & "," & w & "/2内的最大素数:" & l1 & ",拆分素数对:" & j & ",用时:" & Timer - t & "秒"
End Sub
Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub
|
|