|

楼主 |
发表于 2020-8-11 11:56
|
显示全部楼层
本帖最后由 ysr 于 2020-8-13 00:55 编辑
差为6的素数对很多,计算数据大的话消耗时间太长,下面是1~1000内的孪生(p,p+6)素数对:
1与1000之间有74对孪生(p,p+6)素数对:
/5/11
/7/13
/11/17
/13/19
/17/23
/23/29
/31/37
/37/43
/41/47
/47/53
/53/59
/61/67
/67/73
/73/79
/83/89
/97/103
/101/107
/103/109
/107/113
/131/137
/151/157
/157/163
/167/173
/173/179
/191/197
/193/199
/223/229
/227/233
/233/239
/251/257
/257/263
/263/269
/271/277
/277/283
/307/313
/311/317
/331/337
/347/353
/353/359
/367/373
/373/379
/383/389
/433/439
/443/449
/457/463
/461/467
/503/509
/541/547
/557/563
/563/569
/571/577
/587/593
/593/599
/601/607
/607/613
/613/619
/641/647
/647/653
/653/659
/677/683
/727/733
/733/739
/751/757
/821/827
/823/829
/853/859
/857/863
/877/883
/881/887
/941/947
/947/953
/971/977
/977/983
/991/997
由于1000内有2组6生素数,能产生2*4=8对差为6的不相邻的素数对,其他素数对74-8=66对可能都是相邻素数对了。
可见差为6的相邻素数对是很多的。
程序代码如下:(仅发主程序)
Private Sub Command1_Click()
Dim a, b
a = Val(Text1)
a1 = a
Q = Val(Text2)
m = Sqr(Q)
If Right(a, 1) Mod 2 = 0 Then
a = a + 1
Else
a = a
End If
s = 0
Do While a <= m
b = a + 6
c = fenjieyinzi0(Val(a))
d = fenjieyinzi0(Val(b))
If InStr(c, "*") = 0 And InStr(d, "*") = 0 Then
s = s + 1
Print a, b, a + 3
Text3 = Text3 & "/" & a & "/" & b & vbCrLf
Else
s = s
End If
a = a + 2
Loop
a2 = a
s1 = s
Do While a2 <= Q
B1 = a2 + 6
c1 = fenjieyinzi0(Val(a2))
D1 = fenjieyinzi0(Val(B1))
If InStr(c1, "*") = 0 And InStr(D1, "*") = 0 Then
s1 = s1 + 1
Print a2, B1, a2 + 3
Text3 = Text3 & "/" & a2 & "/" & B1 & vbCrLf
Else
s1 = s1
End If
a2 = a2 + 2
Loop
Combo1 = a1 & "与" & q & "之间有" & s1 & "对p,p+6素数对:" & vbCrLf & Text3
s103 = DeleteSpace1(Text3)
s103 = Mid(s103, 1)
Dim i As Integer
Dim ak(), s105, cr(), f
Set f = CreateObject("Scripting.Dictionary")
s105 = Split(s103, "/")
j1 = UBound(s105)
Print j1
For k = 1 To j1
n1 = n1 + 1
ReDim Preserve ak(1 To n1)
ak(n1) = s105(n1)
Next
Print ak(1)
n = 0
For k = 1 To j1
For i = 1 To j1
n = n + 1
ReDim Preserve cr(1 To n)
m = Val(ak(k)) + Val(ak(i))
f(m) = ""
Next
Next
n = 0
m = f.Keys
For i = 0 To f.Count - 1
ReDim Preserve cr(1 To i + 1)
cr(i + 1) = m(i)
Next
For i = 1 To UBound(cr) - 1
For j = i + 1 To UBound(cr)
If cr(i) > cr(j) Then
temp = cr(j)
cr(j) = cr(i)
cr(i) = temp 'c数组是排序好的
End If
Next j
' If i Mod 20 = 0 Then
' s104 = s104 & temp & "/" & vbCrLf
' Else
' s104 = s104 & temp & "/"
' End If
Next i
For i = 1 To UBound(cr)
If i Mod 20 = 0 Then
s104 = s104 & cr(i) & "/" & vbCrLf
Else
s104 = s104 & cr(i) & "/"
End If
Next
Print temp
MsgBox "ok"
MsgBox s104 '显示数组
Text4 = s104
End Sub
Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Combo1 = ""
Form1.Cls
End Sub |
|