关于因数个数的估计
根据知乎提问: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}\) |