|

楼主 |
发表于 2020-5-22 00:45
|
显示全部楼层
谢谢老师,非常感谢!
1000000000000内的素数个数下限为 37379740471,实际为37607912018,
10000000000000内的素数个数下限为 337538569552,实际为346065536839,
100000000000000内的素数个数下限为 3112275177784,实际为3204941750802,
1000000000000000内的素数个数下限为 28982978026665,实际为29844570422669,
10000000000000000内的素数个数下限为 271523012960059,实际为279238341033925,
100000000000000000内的素数个数下限为 2.55493817243098E+15,实际为2623557157654233,
1000000000000000000内的素数个数下限为 2.41282618765196E+16,实际为24739954287740860,
10000000000000000000内的素数个数下限为 2.28578411731636E+17,实际为234057667276344607,
100000000000000000000内的素数个数下限为 2.17147952514046E+18,实际为2220819602560918840,
1000000000000000000000内的素数个数下限为 2.06807110443267E+19,实际为21127269486018731928,
10000000000000000000000内的素数个数下限为 1.97406647369896E+20,实际为201467286689315906290,
100000000000000000000000内的素数个数下限为 1.88823707350289E+21,实际为1925320391606803968923,
1000000000000000000000000内的素数个数下限为 1.80956040055934E+22,实际为18435599767349200867866,
这是根据理论依据,调整公式后的验证结果。下面发一下这个程序:
Private Sub Command1_Click()
Dim a, b, c
a = Trim(Text1)
b = Sqr(a)
c = a / Log(a)
If a > 10 ^ 11 Then
s = 1
Do While Int(b ^ (2 ^ (1 - s))) > 1
b6 = b ^ (2 ^ (1 - s))
b7 = 2 ^ (s + 14) * b6 + b7
Print b7
s = s + 1
Loop
c = (a + b7) / Log(a)
ElseIf a > 10000000 Then
a1 = Log(a) / Log(10)
b2 = Exp(1.033 * a1)
b1 = 0.159 * b2
b4 = (1.74136140824861 ^ (1.8 * a1)) / 4.9
b5 = (b1 + b4) / 2
c = (a + (b5 + 4) * b) / Log(a)
ElseIf a >= 10000 Then
a1 = Log(a) / Log(10)
b3 = (56 * a1 ^ 3 - 741 * a1 ^ 2 + 3367 * a1 - 5142) / 6
c = (a + (b3 + 4) * b) / Log(a)
ElseIf a >= 1000 Then
c = (a + 4 * b) / Log(a)
ElseIf a > 500 Then
c = (a + 2 * b) / Log(a)
Else
c = c
End If
d = a / c
d1 = Int(c) * d
c1 = a & "内的素数个数下限为 " & Int(c)
Text2 = c1
End Sub
Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub
采用分段调整,每一段的公式或数据只管本数段,下一段则用另一个外的不同数据或公式,不用管到无穷,直到我们能用到的大整数数段为止,不用管无穷大是否还成立。仅为了使用,用到的都算是经验公式。 |
|