背景
05=0
15=1
25=32
35=243
45=210=1024
⋯
看起来对自然数 n 而言, n5≡n(mod10),那么这个猜测是否正确呢?
正文
题目:对任意自然数 n, n5≡n(mod10) 是否总是成立,请证明其成立或者找到反例
分析
在背景那一小节,我们验证了 n=0,1,2,3,4 时, n5≡n(mod10) 均成立。假如 n5≡n(mod10) 总是成立的话,也许可以用数学归纳法证明。
n=0 时,显然成立。
假设 n=k 时, k5≡k(mod10) 成立,那么我们的目标是证明(或者找到反例来证伪) (k+1)5≡k+1(mod10)
用二项式定理,展开 (k+1)5,可得
(k+1)5
=C50k015+C51k114+C52k213+C53k312+C54k411+C55k510
=C50k0+C51k1+C52k2+C53k3+C54k4+C55k5
=k0+5k1+10k2+10k3+5k4+k5
=1+5k+10k2+10k3+5k4+k5
我们关心的是 k5+1 和 k+1 的差值是否为 10 的倍数,那么我们来计算两者的差值 ⬇️
(k+1)5−(k+1)
=1+5k+10k2+10k3+5k4+k5−(k+1)
=5k+10k2+10k3+5k4+(k5−k)
- 由归纳假设 k5≡k(mod10),所以 10∣(k5−k),可以忽略 (k5−k)
- 10∣10k2,可以忽略 10k2
- 10∣10k3,可以忽略 10k3
那么只要检查 5k+5k4 是否总是 10 的倍数就行了。
5k+5k4=5k(1+k3)
- 如果 k 是奇数,那么 2∣(1+k3),所以 10∣5k(1+k3)
- 如果 k 是偶数,那么 10∣5k,所以 10∣5k(1+k3)
综上 10∣((k+1)5−(k+1))。那么 n5≡n(mod10) 对 n=k+1 也成立。至此,我们用数学归纳法证明了 n5≡n(mod10) 对任意自然数都成立。
程序验证
由于 n5 的个位数只受到 n 的个位数的影响,所以我们只需要验证 n=0,1,2,3,4,5,6,7,8,9 的情况。请将以下代码保存为 verify.py
python
for n in range(10):
print("n: %d, n ** 5: %d, n ** 5 - n: %d" % (n, n ** 5, n ** 5 - n))
使用如下命令可以运行 verify.py
bash
python3 verify.py
运行结果如下
text
n: 0, n ** 5: 0, n ** 5 - n: 0
n: 1, n ** 5: 1, n ** 5 - n: 0
n: 2, n ** 5: 32, n ** 5 - n: 30
n: 3, n ** 5: 243, n ** 5 - n: 240
n: 4, n ** 5: 1024, n ** 5 - n: 1020
n: 5, n ** 5: 3125, n ** 5 - n: 3120
n: 6, n ** 5: 7776, n ** 5 - n: 7770
n: 7, n ** 5: 16807, n ** 5 - n: 16800
n: 8, n ** 5: 32768, n ** 5 - n: 32760
n: 9, n ** 5: 59049, n ** 5 - n: 59040
结果符合预期