Python实现数学黑洞6174猜想
[写个小demo]ovo~偶然想起数学黑洞的问题,想要验证一下猜想。
简单聊聊6174猜想:
6174猜想,1955年,卡普耶卡(D.R.Kaprekar)研究了对四位数的一种变换:任给出四位数k0,用它的四个数字由大到小重新排列成一个四位数m,再减去它的反序数
rev(m),得出数k1=m-rev(m),然后,继续对k1重复上述变换,得数k2.如此进行下去,卡普耶卡发现,无论k0是多大的四位数, 只要四个数字不全相同,最多进行7次上述变换,就会出现四位数6174.
"""狐狸为啥不吃草"""
from itertools import combinations
def menu_data(nums):
# 用字符串的下标操作取出各个位数
a = nums[0] # 千
b = nums[1] # 百
c = nums[2] # 十
d = nums[3] # 个
if not a == b == c == d:
list1 = [a, b, c, d] # 去除list1中各个位数都相同的数
for i in combinations(list1, 4):
i = list(i)
print(i, end='')
sums = 0
while True:
small = int(''.join(sorted(i)))
# print(f'第{sums+1}次,较小数{small}')
big = int(''.join(sorted(i, reverse=True)))
# print(f'第{sums+1}次,较大数{big}')
difference = big - small
# print(f'第{sums+1}次,两数差{difference}')
sums += 1
if difference == 6174:
print(f'结果为:6174,一共用了:{sums}')
break
else:
i = list(str(difference))
# print(i)
if len(i) < 4:
i.append('0')
# print(i)
def main():
for i in range(1000, 10000):
nums = str(i)
menu_data(nums)
main()
以下是程序运行结果的部分截图:
果然喵的没有超过7次的,是不是贼神奇~~