6174猜想的证明 Python

什么是6174猜想

        1955年,卡普耶卡(D.R.Kaprekar)研究了对四位数的一种变换:任给出四位数k0,用它的四个数字由大到小重新排列成一个四位数m,再减去它的反序数rev(m),得出数k1=m-rev(m),然后,继续对k1重复上述变换,得数k2.如此进行下去,卡普耶卡发现,无论k0是多大的四位数,只要四个数字不全相同,最多进行7次上述变换,就会出现四位数6174。

以1234为例

第一次变换:4321-1234=3087

第二次变换:8730-378=8352

第三次变换:8532-2358=6174          符合6174猜想

代码证明

代码一:

def DRK(lst):
      for i in range(7):
            num1=int(''.join(map(str,sorted(lst))))
            num2=int(''.join(map(str,sorted(lst,reverse=True))))
            num3=num2-num1
            lst=sorted(str(num3))
            if num3==6174:
                  return True
      return False

#使用for循环进行排列组合
for a in range(1,10):
      for b in [k for k in range(0,10) if k!=a]:
            for c in [k for k in range(0,10) if (k!=a and k!=b)]:
                  for d in [k for k in range(0,10) if (k!=a and k!=b and k != c)]:
                         if DRK == False:
                            print('结论不成立!')
                            exit()
print('结论成立。')

用for循环遍历来组合会有很多组合重复被选中,比如1234这个四位数就有多种选法:【1,2,3,4】、【2,1,3,4】、【3,1,2,4】、【4,1,2,3】等等。

别急,咱还有第二套方案!

代码二:

from itertools import *

def DRK(lst):
      for i in range(7):
            num1=int(''.join(map(str,sorted(lst))))
            num2=int(''.join(map(str,sorted(lst,reverse=True))))
            num3=num2-num1
            lst=sorted(str(num3))
            if num3==6174:
                  return True
      return False

lst=[k for k in range(10)]
#使用itertools库中的combinations()函数进行组合
for i in combinations(lst,4):
      if DRK(list(i))==False:
            print('结论不成立!')
            exit()    #有一个不成立的就直接退出循环
            
print('结论成立。')

两个代码的效率比较

 可见代码二明显优于代码一

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可乐喽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值