本
文
摘
要
首先艾特
@虹桥浪音 。虹桥老弟前一段时间有一个想法,大致是说:如果让他设计游戏,他会将角色的血量上限设为 10080,因为 10080=25×32×5×710080=2^5\times3^2\times5\times7 ,方便计算,并且接近 10000,若血量介于 10000 和 10080 之间则可以显示满血,否则显示为以 10000 为单位的百分比。
这不禁让我想到一个问题,类似这里的 10080 的性质的数,还有多少?
可以看出,这样的数必须满足以下特点:
与 10 的正整数幂必须很接近,这里我可以假设为,相差不超过这个 10 的幂的 5%。约数必须足够多,因为约数越多的自然数,越满足「方便计算」的特点。这里我将其设定为,这个数与 10 的幂之间的所有自然数,约数个数都没有这个数多。由以上两点,我们不难写出 Mathematica 代码:
Block[{j = 10, n = 8, r = 0.05}, TableForm[ Join @@ (Function[x, Join[Fold[ If[#2[[2]] > First[#1][[2]], Prepend[#1, #2], #1] &, {{x, DivisorSigma[0, x]}}, {#, DivisorSigma[0, #]} & /@ Reverse[Range[Ceiling[x (1 - r)], x - 1]]], Drop[Fold[ If[#2[[2]] > Last[#1][[2]], Append[#1, #2], #1] &, {{x, DivisorSigma[0, x]}}, {#, DivisorSigma[0, #]} & /@ Range[x + 1, Floor[x (1 + r)]]], 1]]] /@ (j^Range[n]))]](目前知乎的排版似乎还不支持 Wolfram 语言)
我们得到的从 10110^1 到 10810^8 附近的约数多的数列表如下:
10 4
96 12
100 9
960 28
990 24
10 4
96 12
100 9
960 28
990 24
1000 16
1008 30
9900 54
9936 40
9996 36
10000 25
10010 32
10032 40
10080 72
98280 128
99792 100
99960 96
99990 48
100000 36
100016 40
100050 48
100080 60
100100 72
100320 96
100800 126
997920 240
999600 180
999936 120
999999 64
1000000 49
1000008 96
1000350 120
1001000 128
1001700 144
1002456 160
1003200 168
1004640 192
1028160 224
9979200 420
9996000 288
9999360 264
9999990 256
10000000 64
10000032 96
10000080 240
10006920 288
10024560 400
10090080 432
99459360 768
99590400 648
99792000 640
99999900 576
99999984 240
100000000 81
100000032 96
100000044 108
100000120 128
100000320 224
100000800 432
100013760 504
100059960 512
100069200 540
100124640 576
100245600 720
100900800 756
102702600 768其中空格后那个数为其约数个数。
当然,如果你需要寻找更多这样的数、将 5% 的范围调整为更合适的数或干脆使用其他进制,欢迎将代码中前面列出的参数进行修改。
以上的代码及数据,请虹桥老弟自取。