众所周知,如果一个自然数的平方根不是整数,那么就一定是无理数,也即无限不循环小数。

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题:平方根数字展开相关推荐

  1. 【欧拉计划第 5 题】最小公倍数 Smallest multiple

    Problem 5 Smallest multiple 2520 is the smallest number that can be divided by each of the numbers f ...

  2. 【欧拉计划第 13 题】 大数之和 Large sum

    Problem 13 Large sum Work out the first ten digits of the sum of the following one-hundred 505050-di ...

  3. 欧拉计划 第5题 Smallest multiple

    问题 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any r ...

  4. 详解欧拉计划第395题:毕达哥拉斯树

    本题难度系数为40%(最易5%,最难100%). 毕达哥拉斯树是按如下步骤生成的分形图形: 从一个单位正方形开始,以其中一条边为基底(在图示中,单位正方形下放的边作为基底),给基底所对的边粘连上一个三 ...

  5. 欧拉计划:第53题 Combinatoric selections

    欧拉计划:第53题 Combinatoric selections 无意中知道有这个用编程解决数学题的网站,个人对数学又比较感兴趣,所以打算做个欧拉计划系列,将自己的一些见解分享给大家,第一次写文章, ...

  6. 欧拉计划(project euler)最详细中文题解

    欧拉计划是一个在线解题网站,题目以各类数学问题为主,通常需要结合一定的数学与编程知识,写出适当的程序求解问题(详细介绍可以参见我的文章).相比于力扣等刷题网站,欧拉计划上的题目有着更丰富的知识背景,在 ...

  7. 欧拉计划(鱼C论坛)@20161107

    1.10以下的自然数中,属于3或5的倍数的数字有3,5,6,9,它们之和为23找出1000以下的自然数中,属于3或5倍数的所有数字之和. """ 欧拉计划 10以下的自然 ...

  8. 欧拉计划 Project Euler 50-56

    Project Euler 50-56 Project Euler: https://projecteuler.net/ Project Euler | 欧拉计划: https://pe-cn.git ...

  9. 欧拉计划 P429 (数论)

    欧拉计划 P429 Sum of squares of unitary divisors(数论) 传送门:https://projecteuler.net/problem=429 题目大意: 定义一个 ...

  10. python求直角三角形个数的公式_Python3 欧拉计划 问题71-75

    EulerProject.png 问题66-70参见:https://www.jianshu.com/p/d0fad6213433 71.有序分数 考虑形如n/d的分数,其中n和d均为正整数.如果n ...

最新文章

  1. 杭州码农哀叹:新买的房子装修到一半没钱了,靠着贷款平台借钱才勉强推进。这套房子价格高达1000多万,有钱买却没钱装修!...
  2. SDN和OpenFlow的区别—Vecloud微云
  3. leetcode 219. 存在重复元素 II(规定步长)
  4. 【阿里架构设计思想】一线互联网系统的核心架构是什么样子的?淘宝系统架构演进之路
  5. SAP云平台Extension Factory和微软Azure上的Lambda Function
  6. 数据包如何正确的发到目的地_江苏工业交换机厂家浅谈交换机如何应用
  7. CentOS6.5搭建SVN服务器(Apache+SVN)
  8. Flask 第三方组件之 script
  9. 视觉slam十四讲 pdf_视觉SLAM十四讲|第12讲 回环检测
  10. 网站发布错误“遭遇战”
  11. MKCMS6.2.3视频程序源码修复列表页
  12. 图解Http学习第四章
  13. 英特尔放出Linux微代码以修复Meltdown和Spectre漏洞
  14. 【IPM2020】一种处理多标签文本分类的新颖推理机制
  15. 使用intellij idea创建JSP和引入Tomecat包
  16. 静态页面放图片及居中
  17. Linux连接Internet
  18. 1250_FreeRTOS_QEMU_M3_blinky例程梳理分析
  19. 威金蠕虫(网吧杀手)肆虐互联网 九千用户十余企业遭攻击
  20. 【GitHub】利用Github建立你的个人网站

热门文章

  1. 系列之FIRST——跑酷小游戏:关卡+BOSS+技能版
  2. 手机聊天页面 html5,HTML5仿手机微信聊天界面
  3. Sqilabs第五关注入常用注入方式详解
  4. 给最真的自己加上static final
  5. APP推广|小众APP推广渠道,总有适合你的。
  6. python数据库操作orm_python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
  7. vscode 中怎么打开资源管理器?
  8. 真正提升关键词排名的外链应该怎样发?
  9. Input和Output
  10. python如何debug找到错误_调试python,我找不到哪里出错了?