数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: simpley

li(x)函数:求x内有多少个素数

[复制链接]
发表于 2020-7-1 20:52 | 显示全部楼层
我的下限公式在1亿内也可以做到与实际值仅末尾2位不同,从1亿到10^26之间经过调整也可以做到。比如1亿内的素数个数我的公式计算结果是5761404,而实际是5761455.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-2 00:17 | 显示全部楼层
n/ln(n)和li(n),一个平均密度是1/ln(n),一个密度是1/ln(n).
黎曼假设就是黎曼在给出pai(n)的准确表达时提出的

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-4 13:11 | 显示全部楼层
除黎曼的公式外(准确值),li(x)是目前与π(x)误差最小的公式(拟合公式除外,即为减小误差造一个式子刻意增加或减小,缺乏数学理论)。
回复 支持 反对

使用道具 举报

发表于 2020-7-8 10:43 | 显示全部楼层
simpley 发表于 2020-7-4 05:11
除黎曼的公式外(准确值),li(x)是目前与π(x)误差最小的公式(拟合公式除外,即为减小误差造一个式子刻意 ...

如果在几百位上千位的整数之后,精确度仍然能保证只有末尾5位或10位与实际不同那这个公式就是很有价值的,以此为基础,结合我的大素数的估算公式和大素数的快速判定法,就可以得到任意位数的大素数。
回复 支持 反对

使用道具 举报

发表于 2020-7-13 20:04 | 显示全部楼层
本帖最后由 ysr 于 2020-7-13 12:06 编辑

9000内的求相邻素数对的函数y2=0.3323*x^2-18.747+263.49.对应规则有问题,所以

改了对应规则,由点(2,189),(4,187),(6,270)……改为点(1,189),(2,187),(3,270)……(17,2).                                          以此模拟的函数为:   y=1.3291x^2-37.494x+263.49.
从x=1~x=17所对应的一段函数曲线与x轴之间,所围成的面积,由定积分得到结果为992.883733.
小于    实际1115,(这句话前面加了“略”字就提示有不良信息无法提交?好好一段话我分成了几次发才搞清楚发出来,这个论坛是咋了?)
而1115-992=123.
123/16=7.6875,263.49+7.6875=271.1775.
则方程调整为: y=1.3291x^2-37.494x+271.1775
从x=1~x=17积分,得到结果是1115.88373.
这个公式误差修正是容易的,哈哈!
由于2*1*189=378,……,2*17*2=68,则得到点:
(1,378),(2,748),(3,1620),……,(17,68)。拟合函数为:
y1=-2.6414x^2-15.053x+942.
y2=1636.5e^(-0.1716x).
从x=1~17由y1积分得到8579.51573,实际9000内的最大素数为8996+3=8999.
8999-8579=420.
378+748+……+68=8996,8996+3=8999.
420/16=26.25,942+26.25=968.25. 则公式调整为:
y=-2.6414x^2-15.053x+968.25.
从x=1~17积分,结果是8999.51573.  哈哈哈,细心一点,如果技术好了,就可以准确得到某整数内的最大素数值。
再试试几个数,弄出来个普遍公式就好了。(这一段论坛老说有不良信息无法提交?)

普遍公式是与某数内的素数个数精确公式紧密相连的,有了这个精确公式为基础,就可以推导计算出某数内的最大素数的精确值,从而得到我们需要的任意位的大素数。

欢迎沟通探讨!欢迎给出准确的素数个数公式!
回复 支持 反对

使用道具 举报

发表于 2020-7-13 22:06 | 显示全部楼层
1000000000000000000000000000内(就是10^27内)的素数个数下限为 16163872900353600000000000,实际为16 3524 6042 6841 6804 4642 7399.
此结果的程序如下:

Private Sub Command1_Click()
Dim a, b
Dim c As Double
a = Trim(Text1)
b = Sqr(a)
c = a / Log(a)
If 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)
'c = 0.1174 * Exp(2.2094 * a1)
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)
ElseIf a >= 100 Then
c = (a + b) / Log(a)
Else
c = c
End If
d = a / c
d1 = a - Int(d)
c1 = a & "内的素数个数下限为 " & Format(c, "#")
Text2 = c1
Text3 = d1
End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub

回复 支持 反对

使用道具 举报

发表于 2020-7-13 22:09 | 显示全部楼层
这个已经是接近实际的下限,再继续调整很困难,需要分段了,否则,再继续接近实际就会出现有的数段大于实际而有的数段小于实际的情况了。
回复 支持 反对

使用道具 举报

发表于 2020-8-1 11:57 | 显示全部楼层
1~40000内的素数间隔2/4/6/8/10/12/14/16/18/20/22/24/26/28/30/32/34/36/38/40/
42/44/48/50/52/54/62/72/共有4202个素数。差2=591 差4=580 差6=918 差8的=345 差10的=397 差12=426 差14=196 差16=143 差18=209 差20=87 差22=85 差24=56 差34的=13最大的其中素数是39989
观察了一下,每组第三个点取出来更合适,不管高低,每组剩余的两个差别不大。
把一个数列拆开成3个数列,也许这样会准确一点。
由点(1,591)(2,345)(3,196)
(1,580)(2,397)(3,143)
(1,918)(2,426)(3,209)
拟合函数如下:
y1=48.5x^2-391.5x+934,
y2=31.25x^2-330.15x+892.25,
y3=84.75x^2-704.05x+1526.8
最大素数间距按4c1=40算,40/2/3=6,对y1,y2积分从1~7分别是1737,992.4,对y3积分从1~6,得到1386.875
1737+992+1386=4115
实际是4202,而4202-4115=87.
可能是准确,但是太麻烦了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-7-16 05:20 , Processed in 0.095785 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表