0145 可逆数
* * * *
拉格朗日计划
* * * *
可逆数

给定正整数n,令r(n)为将n中的数字逆序排列后所得的数字。若n和r(n)的位数相同,且$n+r(n)$的所有数字均为奇数,则称n为可逆数。

例如$36+63=99$,$409+904=1313$,因此36、63、409、904都是可逆数。

小于一千的数中一共有120个可逆数。在小于十亿($10^9$)的数中,一共有多少个可逆数?

本题难度:



解答

本题的关键是能注意到不存在九位的可逆数。若$n=a_9\ldots a_1$是一九位可逆数,则n与r(n)的各位数字之和分别是 $$a_9+a_1, \; a_8+a_2, \;a_7+a_3, \;a_6+a_4, \;a_5+a_5, \;a_4+a_6, \;a_3+a_7, \;a_2+a_8, \;a_1+a_9.$$ 显然$a_5+a_5$是偶数,因此有$a_4+a_6>10$且为奇数,从而$a_7+a_3=a_3+a_7$是偶数,进而有$a_2+a_8=a_8+a_2>10$且为奇数,从而首位$a_9+a_1$需要是偶数,不过$a_9+a_1$又等于末位的$a_1+a_9$,而$a_1+a_9$应是奇数,故矛盾。

此外,还应注意到可拟数的首位和末位的奇偶性必然不同,而n是可逆数等价于r(n)是可逆数,因此只需考虑奇数即可。

暴力搜索即得结果$608720$。

print 2*sum(all(i in "13579" for i in str(n+int(str(n)[::-1]))) for n in range(11,100000000,2))