关于因数个数的估计

根据知乎提问:n的正因子个数d(n)有没有上界公式? 的某一篇回答:

依次进行正因子个数的上界估计。


根据常规 64 位 C++ 编译器,已定义好的最大可处理数字为无符号 128 位数。

\(\lg 2^{128}={128\ln 2\over \ln 10}=38.531839444989586\) 得到,数字大小最大为 \(10^{38}\) 数量级。

代入该公式,设 \(f=1.0660186782978\) ,则 \(d(n)\leq n^{f\over \ln\ln n}\)

根据因子成对出现的性质,显然有 \(d(n)=O(n^{1\over 2})\)

故接下来对能覆盖到 \(10^38\) 范围内的数字,因子数量复杂度低于该数量级的数字进行讨论。

若使得因子数量复杂度为 \(O(n^{1\over a})\) 级别,则 \({1\over a}={f\over \ln\ln n}\) 得到 \(n=\exp(\exp(af))\)

\(2^{128}\) 范围内的数字大小,只要求解 \(a\leq {\ln \ln n\over f}=4.207728658657603\) 范围内的数即可。


根据上文分析,写出 Python 代码打表得到:

from math import exp, log, ceil
a = [i/10 for i in range(21, 51)]
f = 1.0660186782978
n = [exp(exp(aa*f)) for aa in a]
n = [ceil(e) for e in n]

因数据过大,对数据进行了一定的处理。打表结果如下:

\(a\) \(n\) 的近似值(精确到 \(1\) 位有效数字)
\(2.1\) \(1.2\times 10^{4}\)
\(2.2\) \(3.5\times 10^{4}\)
\(2.3\) \(1.2\times 10^{5}\)
\(2.4\) \(4.1\times 10^{5}\)
\(2.5\) \(1.8\times 10^{6}\)
\(2.6\) \(8.8\times 10^{6}\)
\(2.7\) \(5.3\times 10^{7}\)
\(2.8\) \(4.0\times 10^{8}\)
\(2.9\) \(3.7\times 10^{9}\)
\(3.0\) \(4.4\times 10^{10}\)
\(3.1\) \(6.8\times 10^{11}\)
\(3.2\) \(1.5\times 10^{13}\)
\(3.3\) \(4.4\times 10^{14}\)
\(3.4\) \(2.0\times 10^{16}\)
\(3.5\) \(1.4\times 10^{18}\)
\(3.6\) \(1.5\times 10^{20}\)
\(3.7\) \(2.7\times 10^{22}\)
\(3.8\) \(8.9\times 10^{24}\)
\(3.9\) \(5.7\times 10^{27}\)
\(4.0\) \(7.6\times 10^{30}\)
\(4.1\) \(2.3\times 10^{34}\)
\(4.2\) \(1.7\times 10^{38}\)
\(4.3\) \(3.3\times 10^{42}\)
\(4.4\) \(2.0\times 10^{47}\)
\(4.5\) \(4.2\times 10^{52}\)
\(4.6\) \(3.5\times 10^{58}\)
\(4.7\) \(1.4\times 10^{65}\)
\(4.8\) \(2.8\times 10^{72}\)
\(4.9\) \(4.0\times 10^{80}\)
\(5.0\) \(4.7\times 10^{89}\)
posted @ 2022-03-28 12:43  JustinRochester  阅读(697)  评论(0编辑  收藏  举报