Project Euler 55: Lychrel numbers
五十五、吕克雷尔数(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的更多相关文章
- Project Euler:Problem 55 Lychrel numbers
If we take 47, reverse and add, 47 + 74 = 121, which is palindromic. Not all numbers produce palindr ...
- 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 ...
- Project Euler Problem 21-Amicable numbers
先说最暴力的算法,直接对一万内的每个数字暴力分解因子(对每个数字的时间复杂度是O(sqrt(n)的),然后,用个数组记录下来因子和,然后寻找 亲密数. 好一点:要先打个素数表,然后对每个数字,分解素因 ...
- 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 ...
- Python练习题 048:Project Euler 021:10000以内所有亲和数之和
本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...
- Python练习题 040:Project Euler 012:有超过500个因子的三角形数
本题来自 Project Euler 第12题:https://projecteuler.net/problem=12 # Project Euler: Problem 12: Highly divi ...
- Python练习题 039:Project Euler 011:网格中4个数字的最大乘积
本题来自 Project Euler 第11题:https://projecteuler.net/problem=11 # Project Euler: Problem 10: Largest pro ...
- [project euler] program 4
上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...
- Python练习题 029:Project Euler 001:3和5的倍数
开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...
随机推荐
- Tomcat7.0.40注册到服务启动报错error Code 1 +connector attribute sslcertificateFile must be defined when using ssl with apr
Tomcat7.0.40 注册到服务启动遇到以下几个问题: 1.启动报错errorCode1 查看日志如下图: 解决办法: 这个是因为我的jdk版本问题,因为电脑是64位,安装的jdk是32位的所以会 ...
- drf源码save以及response
drf源码save以及response 一.save 其中蛮重要的一段 if self.instance is not None: self.instance = self.update(self.i ...
- (未完)经典Web漏洞实战演练靶场笔记
记录下自己写的经典Web漏洞靶场的write up,包括了大部分的经典Web漏洞实战场景,做个笔记. 0x01 任意文件下载漏洞 if(!empty($_GET['filename'])){ $fil ...
- POWERSPLOIT-Exfiltration(信息收集)脚本渗透实战
Exfiltration模块 a) 调用Get-Keystrokes记录用户的键盘输入. 1)通过IEX下载并调用Get-Keystrokes. PS C:\Users\Administrator&g ...
- Redis 3.0中文版学习(一)
网址:http://wiki.jikexueyuan.com/project/redis-guide/entry-to-master-a.html http://www.yiibai.com/redi ...
- [JZOJ4737] 【NOIP2016提高A组模拟8.25】金色丝线将瞬间一分为二
Description Input Output Sample Input 5 101 12 23 34 45 5 Sample Output 4 Data Constraint Hint 开long ...
- Android WebSocket实现即时通讯功能
最近做这个功能,分享一下.即时通讯(Instant Messaging)最重要的毫无疑问就是即时,不能有明显的延迟,要实现IM的功能其实并不难,目前有很多第三方,比如极光的JMessage,都比较容易 ...
- SVN工具常用功能总结
使用SVN作为版本管理工具,可以使用VisualSVN Server+TortoiseSVN搭建SVN版本控制系统,组长安装VisualSVN Server,组员安装TortoiseSVN. Tort ...
- 查看线上日志利器less
less实用命令 搜索 很多关于命令的解释有点令人困惑,因为前字,forward是向前,before也是前面. 上表示backward 下表示forward 向下搜索 / - 使用一个模式进行搜索,并 ...
- Echarts导出为pdf echarts导出图表(包含背景)
Echarts好像是只支持png和jpg的导出,不支持pdf导出.我就想着只能够将png在后台转为pdf了. 首先介绍一下jsp界面的代码. var thisChart = echarts.init( ...