数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: ysr

数论问题巅峰对决

[复制链接]
 楼主| 发表于 2020-11-7 11:28 | 显示全部楼层
哥德巴赫猜想解的总个数是波动式上升的,波动是不规则的,无法跟踪波动,处处合拍。但可以减小波动幅度,波动幅度主要与素因子有关,其他因素也有影响但影响小,可以忽略。素因子的影响主要是小素因子的影响,大素数因子影响小几乎没有影响。所以,分成多个数列分别考虑和计算,用不同的公式。这样结果就更接近实际,更准确。祝愿感兴趣的朋友们取得更大进步!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-7 12:12 | 显示全部楼层
40页391#楼的这段重发一下:
偶数的哥德巴赫猜想解的个数的精确值的巨大意义:前面我们知道,对小的偶数分解质因数就可以得到其哥德巴赫猜想解的精确值,那么,若通过其他方法得到了其哥德巴赫猜想解的精确值能不能逆推回去,从而分解该偶数呢??
答案基本上是肯定的,或者说是可能的。
因为,我几年前就在网上看到过这样的一个程序:只要输入高精度的小数,就可以输出该小数的根式或两个整数的比值!该软件现在找不到了,但不能说没有了。
通过前面的论述,我们知道,只含有某奇素因子p的偶数其哥德巴赫猜想解的实际个数是理论最低值的(p-1)/(p-2)倍,或者是理论最大值的1/(p-1)/(p-2),这样,
我们知道了实际值,知道了理论最低值(或理论最大值,理论最大值可以用前面的方法得到也可以用偶数A的A/2~A之间的素数个数c代替),就可以得到精确的比值,从而逆推出比值的分子p-1。
这样就得到了因子p.

对于RSA密码中的公开模数n,一般是双因子的,这个方法就很方便的分解了。(多因子的暂不考虑)。

那么,对于3个不同的奇素因子的公开模数n又如何呢?(这样也许更安全更难分解呢,位数必须是4096位以上)
讨论如下:
设n=p1*p2*p3.
显然p3是大于n的方根的,则由前面的方法就会得到分子(p1-1)(p2-1),我们令p=(p1-1)(p2-1)+1,则显然p是不能分解n的,但是,特殊情况如何呢?如p2=p1+2?
若p2=p1+2,则有(p1-1)(p2-1)+1=p1*p2-p1-p2+1+1=p1*p2-p1-p2+2=p1^2+2p1-p1-p1-2+2=p1^2.
则此时p=p1^2,将其开平方即可。如(3-1)(5-1)=2*4=8,8+1=9=3^2.得到3*5=15的因子3.

若p2,p1的差很小,则将p开平方的整数部分就会等于或略大于p1,从而容易得到p1,进一步得到p2,从而彻底分解n。
若p2-p1=x很大,比如p1为100位的,而x为200位的,那又如何?请看如下公式:
p=(p1-1)(p2-1)+1=p1p2-p1-p2+2=(p2-x)p2-p2+x-p2+2=p2^2-(x+2)p2+x+2,或者是P=p1^2+(x-2)p1-x+2,若知道x的值,则可以通过P-x-2,或P+x-2与n求公因子而得到p2或p1,从而得到p2,进一步彻底分解n.否则,若不知道x的值,就无法分解了。

超过3个不同的因子如何呢?需要研究!

通过讨论,只要不同的奇素因子不超过3个都可以分解。(这也仅是可能行,推测或猜想,需要研究!)公开模数n是奇数,要乘以2才能变为偶数才能用此法!

对于多因子的公开模数n又如何?
请看公式:一般的的n为如下这样形式:n=p^s*q^t,其中p,,q为素数而s,t为整数,这样的可以分解,用前面的方法得到分子(p-1)(q-1),从而得到P=(p-1)(q-1)+1,进一步得到p或q.

感兴趣的话改天专题讨论此问题,欢迎沟通欢迎探讨,欢迎批评!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-7 12:13 | 显示全部楼层
连乘积公式:((p0-2)/p0)*((p1-2)/p1)*……*((p-2)/p),其中p为偶数A的方根内的最大素数。p的个数x(x为偶数方根内的素数个数)与连乘积的关系?用程序计算一些结果,模拟个公式吧!
连乘积公式结果: 偶数a=1000/0.333333333333333/0.2/0.142857142857143/0.116883116883117/9.89010989010987E-02/8.72656755009695E-02/7.80798149219201E-02/7.12902657982749E-02/6.63736957432215E-02/6.20915218243039E-02方根内>=3的素因子个数x=10
连乘积结果是减函数,极限是0.

用excel拟合的函数为:y=0.328*x^(-0.7341),其中R^2=0.999.
这个比值乘以A/4就是偶数A的哥德巴赫猜想解的理论最低值,比如210的理论值就是:210/4*0.98901=5.1923,实际为19对,因为210=2*3*5*7。
连乘积公式程序结果: 连乘积公式结果: 偶数210  其方根内最大素数13 方根内的素数个数m=6  每m-1个中的平均值0.835714285714284  总个数为5.19230769230768,其中b=9.89010989010987E-02.

而连乘积(又一个)((p0-1)/(p0-2))*((p1-1)/(p1-2))*……*((p-1)/(p-2)),与x又有啥关系?
连乘积公式结果: 偶数a=1000/2/2.66666666666666/3.19999999999999/3.55555555555554/3.87878787878786/4.13737373737373/4.38074866310158/4.5893557422969/4.75933188090051/4.92344677334535方根内>=3的素因子个数x=10
看上去是增函数,是发散的,好像没有极限。
用excel拟合的函数为:y=1.2978*ln(x)+1.8489.其中R^2=0.9925.

此比例乘以前面的理论最低值就是理论最大值,如210的理论最大值是5.1923*3.199999=16.6153548.低于实际值19.
因为A/2~A之间的素数个数c是绝对的最大值,绝对上限。对于210来说,105~210之间有19个素数,所以19对解是绝对上限。

为啥理论最低值偶尔会有多于实际的情况?
这是因为素数分布的不规则性,其实就是不同的素因子在其不同的周期内的节拍错位造成的。
比如10000的哥德巴赫猜想解的理论值(就是连乘积结果)是95,而实际为127,10006的理论值也是95,而实际是92.
连乘积公式结果: 偶数10000  其方根内最大素数97 方根内的素数个数m=25  每m-1个中的平均值3.75350895581372  总个数为95.7426027628115其中b=3.82970411051246E-02
连乘积公式结果: 偶数10006  其方根内最大素数97 方根内的素数个数m=25  每m-1个中的平均值3.75350895581372  总个数为95.8000483244692其中b=3.82970411051246E-02。

(偶数)(方根内的和对个数)(总素数和对个数)
10000   2   127
10002   6   197
10004   4   99
10006   1   92
10008   4   192
10010   5   191
10012   5   99
10014   6   209
10016   3   104
10018   2   99
10020   8   263
10022   2   93
10024   2   121
10026   5   194
10028   4   106
10030   2   139
10032   3   238
10034   2   104
10036   1   109
10038   5   235
10040   4   132
10042   2   97
10044   4   203
10046   5   105
10048   2   102
10050   5   256
10052   3   113
10054   2   109
10056   5   190
10058   1   99
10060   2   131
10062   3   218
10064   2   112
10066   3   119
10068   5   198
10070   4   137
10072   3   92
10074   5   198
10076   3   110
10078   4   96
10080   7   315
10082   4   99
10084   4   101
10086   5   208
10088   2   109
10090   5   136
10092   5   200
10094   1   120
10096   6   102
10098   9   241
10100   3   131
偶数的拆分个数,就是哥德巴赫猜想解的个数。

每3个一组中,能被3整除的都高一点:
10002=2*3*1667 有197对
10008=2*2*2*3*3*139 有192对

10000=2*2*2*2*5*5*5*5 有127对
10006=2*5003 有92对

10004=2*2*41*61 有99对
10010=2*5*7*11*13 有191对
按照连乘积公式结果10000的拆分解的个数是95对。

比如10072连乘积结果是96,而实际是92.
所以,不规则分布,节拍错位,影响最低值,而不同的素因子个数的多少,影响最大值,比如含有某素因子p的理论值应该是理论最低值乘以(p-1)/(p-2)。
如含有因子3的偶数的理论哥德巴赫猜想解为,理论最低值乘以(3-1)/(3-2)=2。如10002就是95*2=190,实际是197,比实际低。
比如10010的哥德巴赫猜想解的理论值就是:95*3.878787/2(除以2是因为10010不含有素因子3)=184.289882.实际为191,比实际低一点。

可见要想得到非常接近实际的哥德巴赫猜想解的个数,x的值必须准确!而x的值就是素数个数,所以,素数个数公式必须准确,前一个比例公式是减函数,
少一个反而大于实际,多一个就小于实际而且差距很大。后面一个比例公式是增函数,多一个就大于实际,少一个就明显小于实际。

而且小的素因子对结果的影响反而很大。

连乘积公式结果: 偶数10072  其方根内最大素数97 方根内的素数个数m=25  每m-1个中的平均值3.75350895581372  总个数为96.4319495027037其中b=3.82970411051246E-02.

10072=2*2*2*1259.

从前面的论述可以得到:不同的素因子个数对偶数的哥德巴赫猜想解的个数是有影响的,但不是线性关系,为啥呢?
其实就是因为不同的素因子对哥德巴赫猜想解的个数影响是不同的,越小的素因子影响反而越大。比如仅含有素因子3的偶数其哥德巴赫猜想解的个数是理论最小值的2倍,前面说的就是(3-1)/(3-2)=2,而仅含有素因子5的偶数只是理论最低值的(5-1)/(5-2)=4/3<2.
所以说,不同的素因子影响不同,而素因子个数的多少的影响结果不是线性关系。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-13 11:36 | 显示全部楼层
本帖最后由 ysr 于 2020-11-14 11:15 编辑

如下是个好玩的程序,是用前述方法对整数6958000001674999998647的分解,这是22位的整数,是两个11位的整数的积。
如下程序输出结果为634876752188346,是15位的,前11位接近实际。是两种算法对偶数2*6958000001674999998647=13916000003349999997294的哥猜解个数的求结果的比值,把小数变成整数的比值,分子就是所求(不会还原小数的整数比值,就是把分子的小数点去掉而已)。
实际整数6958000001674999998647=71000000041*97999999967,此方法仅是一种猜想而已。
下面是程序代码:(仅发主程序)

Private Sub Command1_Click()
Dim a, b, c
a = Trim(Text1)
b = 2 * a
B1 = Sqr(b)
c = b ^ 0.5664
d = 0.4024 * c
x = qssgs(Trim(B1))
y = 0.328 * x ^ (-0.7341)
q = b * y / 4
q1 = q / d
q2 = q1 * 10 ^ 13
Text2 = q2
End Sub

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

Private Function qssgs(sa As String) As String
Dim a, b, c
a = Trim(sa)
b = Sqr(a)

If a > 10 ^ 25 Then
a1 = Log(a) / Log(10)
b3 = (1.74136140824861 ^ ((1.06415 * Exp(-0.00175 * (a1 - 0.65 * (a1 - 21)))) ^ a1)) ^ a1
c = (a + (b3 + 4) * b) / 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)
ElseIf a >= 100 Then
c = (a + b) / Log(a)
Else

c = a / Log(a)
End If
d = a / c
D1 = a - Int(d)
c1 = a & "内的素数个数下限为 " & Int(c)

qssgs = c

End Function
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-13 11:44 | 显示全部楼层
由于13916000003349999997294除以210的余数是34,所以,求其哥猜解用的函数是y=0.4024*x^0.5664.
另一种方法是前面叙述的公式。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-13 11:58 | 显示全部楼层
本帖最后由 ysr 于 2020-11-13 13:51 编辑

由于有理数有许多是循环小数,而且循环小数可能占的是多数,而素数的倒数的循环节的长度是非常长的,有人证明了:素数p的倒数的循环节的长度是小于等于p-1的,如1/7=0.142857……,循环节6位,6<7.
所以,巨大的整数写出完整的循环节是不太可能的,则小数还原为整数的比值很难,以前在网上见到过这样的程序,不懂原理,也无法找到此程序了。
所以,此法弄出来的就是近似值,如果公式准确,可能就更接近实际,那就有用了。
所以,仅是个猜想,还要继续研究,欢迎讨论,欢迎批评!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 07:49 | 显示全部楼层
用这种方法分解双因子合数再举个例子:14585113=997*14629,2*14585113=29170226,
而29170226而的实际拆分个数为74069,用连乘积计算为82046,则有74069/82046=0.9027740535,去掉小数点为9027740535,前3位接近实际997.
可见还是可以得到近似解的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 07:53 | 显示全部楼层
实际很复杂,不好得到精确值,能不能用需要继续研究。
回复 支持 反对

使用道具 举报

发表于 2020-11-17 10:15 | 显示全部楼层
计算并不复杂,四个公式能计算任意连续及任意大偶数!
D(29170226)=5/8*(29170226+2*29170226/ ln29170226)/(ln29170226)^2=68887
实际分拆数74069/68887=0.93        接近真值,小于真值;优于连乘积,且不用分解质因数,不用知道素数个数!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 15:57 | 显示全部楼层
嗯嗯好!谢谢关注沟通!学习了,如果精确的话就是有价值的。68887/74069=0.9300382076.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-8 02:00 , Processed in 0.078125 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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