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 ...
随机推荐
- 如和用python给女朋友做个专属她的软件
如和用python给女朋友做个专属她的软件 在学习python的路上如果觉得枯燥就可以想我一样做一些有趣的事情就不会无聊了 python是一门及其有趣的语言. 人们都喜欢记住一些重要的日子,比如说跟女 ...
- 古剑奇谭三已取消该页导航,B站版本无法登陆
最近登陆古剑三突然出现这个问题 怎么重开也无法登陆 最后发现是Ie设置问题 解决方法 点中间这个圆形图标打开 小娜 搜索“ie” 点击打开ie之后点右上角的小齿轮 选择“internet选项” 连接- ...
- 重载operator new delete函数
可以重载global的operator new delete 函数,细节如下: MyNewDelete.h #pragma once #include <stdlib.h> #includ ...
- 想转行做3D游戏模型,如何快速入行
随着技术和硬件迭代,3D建模,广泛运用在游戏,影视,动画,VR等领域,而且就业面非常广. 由于3D美术设计师薪资和前景确实都不错,很多同学想进入这个行业,从事相关工作,但是没有一个整体的学习思路和规划 ...
- SpringCloud教程一:eureka注册中心(Finchley版)
一.spring cloud简介 本阶段学习教程Spring Boot版本2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE. Finchley版本的官方文档如 ...
- HTML innerHTML、textContext、innerText
网址 : https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML 1.innerHTML : 获得.修改元素的用HTML语 ...
- Canvas动画基础之碰撞检测
在Canvas中进行碰撞检测,大家往往直接采用游戏引擎(Cocos2d-JS.Egret)或物理引擎(Box2D)内置的碰撞检测功能,好奇的你有思考过它们的内部运行机制吗?下面将针对基本的碰撞检测技术 ...
- [NOIp2014] luogu P2312 解方程
题目描述 已知方程∑i=0naixi=0\sum_{i=0}^{n}{a_ix^i}=0i=0∑naixi=0求该方程在 [1,m][1,m][1,m] 内的整数解. Solution 有一个秦九 ...
- 1、Struts2基本入门
一.了解了这几个主要的优点,会促使你考虑使用Struts2 : 1.POJO表单及POJO操作 - Struts2 去除掉了Struts框架中的Action Forms部分.在Struts2框架下,你 ...
- 你不知道的Canvas(一)
Canvas基础 一.Canvas是什么 Canvas是一个可以使用脚本(通常为JavaScript来绘制图形的HTML) 元素.例如,它可以用于绘制图表.制作图片构图或者制作简单的动画,主要用来绘制 ...