欧拉计划第80题:平方根数字展开
众所周知,如果一个自然数的平方根不是整数,那么就一定是无理数,也即无限不循环小数。
2的平方根为1.41421356237309504880,它的前一百个数字(包括小数点前的1)的和是475。
考虑前一百个自然数的平方根,求其中所有无理数的前一百个数字的总和。
解:
平方根展开式
网上搜到如下的的展开式。
试着编写程序,由于不知道迭代多少次,可以精确到100位小数,就循环了2000次,为了计算分数的精确小数表示,用了decimal。设置100位小数可能会有舍入误差,这里设置102的精度比较安全。
import decimal
import mathdecimal.getcontext().prec = 102def root(x, repeat):a, b = 1, 1for _ in range(repeat):a, b = (x - 1) * b, a + 2 * breturn a + b, bdef sum_digits(frac, digits=100):a, b = fraca_div_b = decimal.Decimal(a) / decimal.Decimal(b)digits = str(a_div_b).replace('.', '')[:digits]return sum(map(int, digits))assert sum_digits(root(2, 1000)) == 475total = 0
for n in range(1, 101):sq = round(math.sqrt(n))if sq * sq == n:continuetotal += sum_digits(root(n, 2000))print(total)
另一种展开式
还有一种展开式,收敛速度更快一些。我只循环了200次。
import decimal
import mathdecimal.getcontext().prec = 102def root(x, repeat):a = int(math.sqrt(x))r = x - a * am, n = 1, 1for _ in range(repeat):m, n = n * r, 2 * a * n + mreturn a * n + m, ndef sum_digits(frac, digits=100):a, b = fraca_div_b = decimal.Decimal(a) / decimal.Decimal(b)digits = str(a_div_b).replace('.', '')[:digits]return sum(map(int, digits))assert sum_digits(root(2, 1000)) == 475total = 0
for n in range(1, 101):sq = round(math.sqrt(n))if sq * sq == n:continuetotal += sum_digits(root(n, 200))print(total)
decimal里支持sqrt
实际上decimal里直接可以进行sqrt()运算。
import decimal
import mathdecimal.getcontext().prec = 102def sum_digits(n):sq = str(decimal.Decimal(n).sqrt())digits = sq.replace('.', '')[:100]return sum(map(int, digits))assert sum_digits(2) == 475total = 0
for n in range(1, 101):sq = round(math.sqrt(n))if sq * sq == n:continuetotal += sum_digits(n)print(total)
欧拉计划第80题:平方根数字展开相关推荐
- 【欧拉计划第 5 题】最小公倍数 Smallest multiple
Problem 5 Smallest multiple 2520 is the smallest number that can be divided by each of the numbers f ...
- 【欧拉计划第 13 题】 大数之和 Large sum
Problem 13 Large sum Work out the first ten digits of the sum of the following one-hundred 505050-di ...
- 欧拉计划 第5题 Smallest multiple
问题 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any r ...
- 详解欧拉计划第395题:毕达哥拉斯树
本题难度系数为40%(最易5%,最难100%). 毕达哥拉斯树是按如下步骤生成的分形图形: 从一个单位正方形开始,以其中一条边为基底(在图示中,单位正方形下放的边作为基底),给基底所对的边粘连上一个三 ...
- 欧拉计划:第53题 Combinatoric selections
欧拉计划:第53题 Combinatoric selections 无意中知道有这个用编程解决数学题的网站,个人对数学又比较感兴趣,所以打算做个欧拉计划系列,将自己的一些见解分享给大家,第一次写文章, ...
- 欧拉计划(project euler)最详细中文题解
欧拉计划是一个在线解题网站,题目以各类数学问题为主,通常需要结合一定的数学与编程知识,写出适当的程序求解问题(详细介绍可以参见我的文章).相比于力扣等刷题网站,欧拉计划上的题目有着更丰富的知识背景,在 ...
- 欧拉计划(鱼C论坛)@20161107
1.10以下的自然数中,属于3或5的倍数的数字有3,5,6,9,它们之和为23找出1000以下的自然数中,属于3或5倍数的所有数字之和. """ 欧拉计划 10以下的自然 ...
- 欧拉计划 Project Euler 50-56
Project Euler 50-56 Project Euler: https://projecteuler.net/ Project Euler | 欧拉计划: https://pe-cn.git ...
- 欧拉计划 P429 (数论)
欧拉计划 P429 Sum of squares of unitary divisors(数论) 传送门:https://projecteuler.net/problem=429 题目大意: 定义一个 ...
- python求直角三角形个数的公式_Python3 欧拉计划 问题71-75
EulerProject.png 问题66-70参见:https://www.jianshu.com/p/d0fad6213433 71.有序分数 考虑形如n/d的分数,其中n和d均为正整数.如果n ...
最新文章
- 杭州码农哀叹:新买的房子装修到一半没钱了,靠着贷款平台借钱才勉强推进。这套房子价格高达1000多万,有钱买却没钱装修!...
- SDN和OpenFlow的区别—Vecloud微云
- leetcode 219. 存在重复元素 II(规定步长)
- 【阿里架构设计思想】一线互联网系统的核心架构是什么样子的?淘宝系统架构演进之路
- SAP云平台Extension Factory和微软Azure上的Lambda Function
- 数据包如何正确的发到目的地_江苏工业交换机厂家浅谈交换机如何应用
- CentOS6.5搭建SVN服务器(Apache+SVN)
- Flask 第三方组件之 script
- 视觉slam十四讲 pdf_视觉SLAM十四讲|第12讲 回环检测
- 网站发布错误“遭遇战”
- MKCMS6.2.3视频程序源码修复列表页
- 图解Http学习第四章
- 英特尔放出Linux微代码以修复Meltdown和Spectre漏洞
- 【IPM2020】一种处理多标签文本分类的新颖推理机制
- 使用intellij idea创建JSP和引入Tomecat包
- 静态页面放图片及居中
- Linux连接Internet
- 1250_FreeRTOS_QEMU_M3_blinky例程梳理分析
- 威金蠕虫(网吧杀手)肆虐互联网 九千用户十余企业遭攻击
- 【GitHub】利用Github建立你的个人网站
热门文章
- 系列之FIRST——跑酷小游戏:关卡+BOSS+技能版
- 手机聊天页面 html5,HTML5仿手机微信聊天界面
- Sqilabs第五关注入常用注入方式详解
- 给最真的自己加上static final
- APP推广|小众APP推广渠道,总有适合你的。
- python数据库操作orm_python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
- vscode 中怎么打开资源管理器?
- 真正提升关键词排名的外链应该怎样发?
- Input和Output
- python如何debug找到错误_调试python,我找不到哪里出错了?