五十五、吕克雷尔数(Lychrel numbers)

如果我们把\(47\)翻转过来并和其自身相加,结果是\(47+74=121\)是一个回文数。并不是所有的数都可以这么快的变成回文数,比如说:

\[\begin{aligned}349 + 943 &= 1292\\1292 + 2921 &= 4213\\4213 + 3124 &= 7337\end{aligned}
\]

也就是说349用了三次迭代才变成一个回文数。

尽管现在还没有人能够证明,但是普遍认为有些数字,比如说196永远不能用上面的方式产生回文数。那些不能通过翻转并相加的方式产生回文数称为吕克雷尔数。出于理论上的考虑以及为了解决这个问题,我们应该假设一个数是吕克雷尔数除非能够证明它不是。此外对于一万以下的数字以下信息已经确定:(1)这些数字要不可以在五十次迭代以内变成回文数;(2)要不就以目前的计算能力还无法让它们变成回文数。事实上,10677是第一个需要超过五十次迭代才能成为回文数的数,这个数是4668731596684224866951378664(需要五十三次迭代,总共二十八位数。)奇怪的是,有一些回文数它本身却是吕克雷尔数,第一个例子是4994。求一万以内有多少个吕克雷尔数?

分析:这道题的思路比较直接,我们在第四题已经编写了一个函数检测某个数字是否是回文数,这里可以直接拿来用。我们对一万以内的数字依次遍历,用其翻转加上它自身,如果在五十次迭代次数以内出现了回文数,则这个数不是吕克雷尔数,否则就是吕克雷尔数。最后统计吕克雷尔数的个数,即为题目所求。代码如下:

# time cost = 64.8 ms ± 229 µs

def is_lychrel(x):
is_palindrome = lambda x : str(x) == str(x)[::-1]
for _ in range(50):
x += int(str(x)[::-1])
if is_palindrome(x):
return False
return True def main():
ans = len([x for x in range(1,10000) if is_lychrel(x)])
return ans

Project Euler 55: Lychrel numbers的更多相关文章

  1. Project Euler:Problem 55 Lychrel numbers

    If we take 47, reverse and add, 47 + 74 = 121, which is palindromic. Not all numbers produce palindr ...

  2. Project Euler:Product-sum numbers (problem 88) C++

    A natural number, N, that can be written as the sum and product of a given set of at least two natur ...

  3. Project Euler Problem 21-Amicable numbers

    先说最暴力的算法,直接对一万内的每个数字暴力分解因子(对每个数字的时间复杂度是O(sqrt(n)的),然后,用个数组记录下来因子和,然后寻找 亲密数. 好一点:要先打个素数表,然后对每个数字,分解素因 ...

  4. Project Euler 44: Find the smallest pair of pentagonal numbers whose sum and difference is pentagonal.

    In Problem 42 we dealt with triangular problems, in Problem 44 of Project Euler we deal with pentago ...

  5. Python练习题 048:Project Euler 021:10000以内所有亲和数之和

    本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...

  6. Python练习题 040:Project Euler 012:有超过500个因子的三角形数

    本题来自 Project Euler 第12题:https://projecteuler.net/problem=12 # Project Euler: Problem 12: Highly divi ...

  7. Python练习题 039:Project Euler 011:网格中4个数字的最大乘积

    本题来自 Project Euler 第11题:https://projecteuler.net/problem=11 # Project Euler: Problem 10: Largest pro ...

  8. [project euler] program 4

    上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...

  9. Python练习题 029:Project Euler 001:3和5的倍数

    开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...

随机推荐

  1. Embarrassment

    I don't know what I did wrong, why do I take care of me? I did something wrong before, your parents ...

  2. 网页布局——float浮动布局

    我的主要参考资料是[Object object]的文章 float 布局应该是目前各大网站用的最多的一种布局方式了,但是也特别复杂,这里详细讲一下 首先,什么是浮动? 浮动元素是脱离文档流的,但不脱离 ...

  3. GUI tkinter (bind)事件篇

    """事件:1.我们的很多操作,比如我们点击了一下鼠标,这就是一 个事件,而操作系统会根据我们的相应的事件产生相应的消息, 操作系统把消息传递给我们的应用程序,然后我们的 ...

  4. python 安装pyqt

    ---恢复内容开始--- 一.安装 1.官网:www.riverbankcomputing.com 2.使用命令安装,可以自动去官网查找与Python版本号相同的程序进行下载,比较方便,如果不是这样也 ...

  5. Html中解决点击 a 标签刷新的问题,实现点击时不刷新

    Html中解决点击 a 标签刷新的问题 我们可以在 <a href=""></a>中,将地址属性href设置为“#” 例如 <a href=" ...

  6. 2019滴滴java面试总结 (包含面试题解析)

    2019滴滴java面试总结  (包含面试题) 本人6年开发经验.今年年初找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是既有php也有Java后端开发,最终选择去了滴滴 ...

  7. x509: certificate is valid for 10.96.0.1, 172.18.255.243, not 120.79.23.226

    服务器:阿里云服务器 master:120.79.23.226 node:39.108.131.246 系统:Centos 7.4 node节点加入集群中是报错: x509: certificate ...

  8. php代码Xdebug调试使用笔记

    0x01 Xdebug简介 Xdebug是一个开放源代码的PHP程序调试器 运行流程: 0x02  Xdebug配置 日志 xdebug.trace_output_dir: 日志追踪输出目录 xdeb ...

  9. 素数与Miller-Rabin测试

    素数及其性质 素数又称质数.指整数在一个大于 111 的自然数中,除了 111 和此整数自身外,没法被其他自然数整除的数. 性质1 有无穷多个素数. 证明: 用反证法.设已知的最大素数为 PPP,考虑 ...

  10. AppBoxFuture: 服务模型的在线调试与性能监测

      框架内的服务模型(ServiceModel)用于处理各类业务逻辑(如最简单的CRUD操作),在设计时以类似于伪代码的形式存在,发布时后端会通过Roslyn转换并编译为运行时代码.为了方便开发者作者 ...