2的正幂 — 2, 4, 8, 16, 32, 64, 128, 256, … — 末尾数字遵循一个显而易见的规律: 2, 4, 8, 6, 2, 4, 8, 6, … . 这4个数字永远循环下去。最末尾数以外还有循环 — 实际上是最末m位 — 从2m 开始的2的幂。例如,从04开始最末两位数就存在一个长度20的循环,同时从008开始最末3位数就存在一个长度100的循环。
本文,我将告诉你为什么会有这些循环,它们有多长,如何表达为数学形式,如何看见它们。
最末尾数的循环
末位数-所在位置-是十进制整数d在d/10后的余数。等价地,末位数是d mod 10的结果,根据约定取最小非负值-普通余数-作为返回结果。模运算,持续叠加到2的幂运算,得到末位数的循环:
- …
我们从2开始,取10的模,再乘以2,再对10取模,等等。可知此模式将循环,直到先前的一个结果-2再次出现在第五步-循环确认。这展现了数字 2n, n ≥ 1, 末位数在四个数字 2, 4, 8, 和 6间循环。
这循环告诉我们,末尾数相同的2的幂是有关联的,它们的指数相差4:
- Ends in 2: 21, 25, 29, 213, 217, … .
- Ends in 4: 22, 26, 210, 214, 218, … .
- Ends in 8: 23, 27, 211, 215, 219, … .
- Ends in 6: 24, 28, 212, 216, 220, … .
你可以使用指数运算规则来更简洁地描述,展示所有2的幂中末位数有规律的前4个:
- Ends in 2: 21·24k, or 21+4k, k ≥ 0.
- Ends in 4: 22·24k, or 22+4k, k ≥ 0.
- Ends in 8: 23·24k, or 23+4k, k ≥ 0.
- Ends in 6: 24·24k, or 24+4k, k ≥ 0.
也可以按照指数对4取模的结果来对2的幂建立联系:
- Ends in 2:
- Ends in 4:
- Ends in 8:
- Ends in 6:
这就很容易知道任意2的正幂的末位数是几。例如, 2319 的末位数是 8, 因为 .
Power of Two (k ≥ 0) | Exponent (mod 4) | Last Digit |
---|---|---|
21+4k | 1 | 2 |
22+4k | 2 | 4 |
23+4k | 3 | 8 |
24+4k | 0 | 6 |
小结,表格告诉我们,如果 , .
末两位数的循环
类似的分析,只是对100取模,展示2的幂的末两位数,从 22 开始,循环周期是20:
Power of Two (k ≥ 0) | Exponent (mod 20) | Last 2 Digits |
---|---|---|
22+20k | 2 | 04 |
23+20k | 3 | 08 |
24+20k | 4 | 16 |
25+20k | 5 | 32 |
26+20k | 6 | 64 |
27+20k | 7 | 28 |
28+20k | 8 | 56 |
29+20k | 9 | 12 |
210+20k | 10 | 24 |
211+20k | 11 | 48 |
212+20k | 12 | 96 |
213+20k | 13 | 92 |
214+20k | 14 | 84 |
215+20k | 15 | 68 |
216+20k | 16 | 36 |
217+20k | 17 | 72 |
218+20k | 18 | 44 |
219+20k | 19 | 88 |
220+20k | 0 | 76 |
221+20k | 1 | 52 |
末三位的循环
为了找出末三位数的循环,重复上面的过程,对1000取模。下面展示了2的幂的末三位,从 23开始,循环周期是100:
Power of Two (k ≥ 0) | Exponent (mod 100) | Last 3 Digits |
---|---|---|
23+100k | 3 | 008 |
24+100k | 4 | 016 |
25+100k | 5 | 032 |
26+100k | 6 | 064 |
27+100k | 7 | 128 |
28+100k | 8 | 256 |
29+100k | 9 | 512 |
210+100k | 10 | 024 |
211+100k | 11 | 048 |
212+100k | 12 | 096 |
213+100k | 13 | 192 |
214+100k | 14 | 384 |
215+100k | 15 | 768 |
216+100k | 16 | 536 |
217+100k | 17 | 072 |
218+100k | 18 | 144 |
219+100k | 19 | 288 |
220+100k | 20 | 576 |
221+100k | 21 | 152 |
222+100k | 22 | 304 |
223+100k | 23 | 608 |
224+100k | 24 | 216 |
225+100k | 25 | 432 |
226+100k | 26 | 864 |
227+100k | 27 | 728 |
228+100k | 28 | 456 |
229+100k | 29 | 912 |
230+100k | 30 | 824 |
231+100k | 31 | 648 |
232+100k | 32 | 296 |
233+100k | 33 | 592 |
234+100k | 34 | 184 |
235+100k | 35 | 368 |
236+100k | 36 | 736 |
237+100k | 37 | 472 |
238+100k | 38 | 944 |
239+100k | 39 | 888 |
240+100k | 40 | 776 |
241+100k | 41 | 552 |
242+100k | 42 | 104 |
243+100k | 43 | 208 |
244+100k | 44 | 416 |
245+100k | 45 | 832 |
246+100k | 46 | 664 |
247+100k | 47 | 328 |
248+100k | 48 | 656 |
249+100k | 49 | 312 |
250+100k | 50 | 624 |
251+100k | 51 | 248 |
252+100k | 52 | 496 |
253+100k | 53 | 992 |
254+100k | 54 | 984 |
255+100k | 55 | 968 |
256+100k | 56 | 936 |
257+100k | 57 | 872 |
258+100k | 58 | 744 |
259+100k | 59 | 488 |
260+100k | 60 | 976 |
261+100k | 61 | 952 |
262+100k | 62 | 904 |
263+100k | 63 | 808 |
264+100k | 64 | 616 |
265+100k | 65 | 232 |
266+100k | 66 | 464 |
267+100k | 67 | 928 |
268+100k | 68 | 856 |
269+100k | 69 | 712 |
270+100k | 70 | 424 |
271+100k | 71 | 848 |
272+100k | 72 | 696 |
273+100k | 73 | 392 |
274+100k | 74 | 784 |
275+100k | 75 | 568 |
276+100k | 76 | 136 |
277+100k | 77 | 272 |
278+100k | 78 | 544 |
279+100k | 79 | 088 |
280+100k | 80 | 176 |
281+100k | 81 | 352 |
282+100k | 82 | 704 |
283+100k | 83 | 408 |
284+100k | 84 | 816 |
285+100k | 85 | 632 |
286+100k | 86 | 264 |
287+100k | 87 | 528 |
288+100k | 88 | 056 |
289+100k | 89 | 112 |
290+100k | 90 | 224 |
291+100k | 91 | 448 |
292+100k | 92 | 896 |
293+100k | 93 | 792 |
294+100k | 94 | 584 |
295+100k | 95 | 168 |
296+100k | 96 | 336 |
297+100k | 97 | 672 |
298+100k | 98 | 344 |
299+100k | 99 | 688 |
2100+100k | 0 | 376 |
2101+100k | 1 | 752 |
2102+100k | 2 | 504 |
末m位数循环
2的正幂的末m位数循环要对10m取模,循环周期是 4·5m-1, 始于 2m. (具体证明涉及到数论,超出了本文的范围)
m | Period (4·5m-1) | Starts with |
---|---|---|
1 | 4 | 21 |
2 | 20 | 22 |
3 | 100 | 23 |
4 | 500 | 24 |
5 | 2500 | 25 |
6 | 12500 | 26 |
7 | 62500 | 27 |
8 | 312500 | 28 |
9 | 1562500 | 29 |
10 | 7812500 | 210 |
周期增长飞快-指数级增长-所以无法列出m大于3的列表。
循环的嵌套(Nesting of Cycles)
对于末m位,m-1位,m-2位, …, 末1位的循环,可以看做是嵌套的,尽管它们的起始点是交错的。你只需将较小的起始数补零,就能让它们对齐。
例如,在长度是100的末三位循环中,包含了5次长度是20的末两位循环;每一个长度是20的末两位循环包含5次长度为4的最末位循环。你从8(需移动两位)开始观察就能发现最末位的规律,末两位的规律始于08(需移动一位),末三位的规律始于008(不需移位)。
下表标出了嵌套的循环(全部100行都被标记,因为只有100个2的幂-末三位的一个循环-被列出)。
使用PARI/GP探索末位循环
我使用PARI/GP 来进行上面的计算和验证。下面是三个例子:
- 列出前20个末位是2的2的幂:
? for (i=0,19,print("2^",1+4*i,": ",2^(1+4*i))) 2^1: 2 2^5: 32 2^9: 512 2^13: 8192 2^17: 131072 2^21: 2097152 2^25: 33554432 2^29: 536870912 2^33: 8589934592 2^37: 137438953472 2^41: 2199023255552 2^45: 35184372088832 2^49: 562949953421312 2^53: 9007199254740992 2^57: 144115188075855872 2^61: 2305843009213693952 2^65: 36893488147419103232 2^69: 590295810358705651712 2^73: 9444732965739290427392 2^77: 151115727451828646838272
- 列出末两位的循环( ‘%’ 号返回余数,等价于取模运算):
? for (i=2,21,print("2^",i," mod(100): ",2^i % 100)) 2^2 mod(100): 4 2^3 mod(100): 8 2^4 mod(100): 16 2^5 mod(100): 32 2^6 mod(100): 64 2^7 mod(100): 28 2^8 mod(100): 56 2^9 mod(100): 12 2^10 mod(100): 24 2^11 mod(100): 48 2^12 mod(100): 96 2^13 mod(100): 92 2^14 mod(100): 84 2^15 mod(100): 68 2^16 mod(100): 36 2^17 mod(100): 72 2^18 mod(100): 44 2^19 mod(100): 88 2^20 mod(100): 76 2^21 mod(100): 52
(单位的数字这里没有前补零)
- 打印末位1到10位数的周期长度:
? for (i=1,10,print(i,": ",4*5^(i-1))) 1: 4 2: 20 3: 100 4: 500 5: 2500 6: 12500 7: 62500 8: 312500 9: 1562500 10: 7812500