Square root digital expansion

It is well known that if the square root of a natural number is not an integer, then it is irrational. The decimal expansion of such square roots is infinite without any repeating pattern at all.

The square root of two is 1.41421356237309504880…, and the digital sum of the first one hundred decimal digits is 475.

For the first one hundred natural numbers, find the total of the digital sums of the first one hundred decimal digits for all the irrational square roots.


平方根数字展开

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

2的平方根为1.41421356237309504880…,它的小数点后一百位数字的和是475。

对于前一百个自然数,求所有无理数平方根小数点后一百位数字的总和。

解题

问题:如何求无理数的一百位小数?这真是无理取闹

参考博客

在上面给的博客中给了一个很好的方法

对于 数 n 我们需要去根号n,如下很有意思的规律

def Suqareroot(n,digits):
limit = 10**(digits+ 1)
a = 5*n
b = 5
while b < limit:
if a>= b:
a -= b
b +=10
else:
a *= 100
b = int(b/10) * 100 + 5
return int(b/100)

说明下:

1.题目让求的是小数点前100位的值,包括整数位

2.上面算法只有最后b/100 是根号n的近似解,这里是去小数点的,只有为什么不是b表示不理解

JAVA

package Level3;

import java.math.BigInteger;
import java.util.ArrayList; public class PE080{ void run(){
int j = 1;
int res = 0;
for(int i=1;i<=100;i++){
if(j*j==i){
j++;
continue;
}
res += Int_Sum(Squareroot(i,100));
}
System.out.println(res);
}
private Integer Int_Sum(BigInteger b){
int res = 0;
String str = b.toString();
for(int i=0;i<str.length() ;i++){
res += str.charAt(i) - '0';
}
return res;
}
private BigInteger Squareroot(int n,int digits){
// 定义上界
BigInteger limit = new BigInteger("10").pow(digits+1);
BigInteger five = new BigInteger("5");
BigInteger ten = new BigInteger("10");
BigInteger hunderd = new BigInteger("100");
BigInteger a = new BigInteger(n+"").multiply(five);
BigInteger b = five;
while( b.compareTo(limit) < 0){
if(a.compareTo(b) >=0){
a = a.subtract(b);
b = b.add(ten);
}else{
a = a.multiply(hunderd);
b = b.divide(ten).multiply(hunderd).add(five);
}
}
return b.divide(hunderd);
} public static void main(String[] args){
long t0 = System.currentTimeMillis();
new PE080().run();
long t1 = System.currentTimeMillis();
long t = t1 - t0;
System.out.println("running time="+t/1000+"s"+t%1000+"ms"); }
}

40886
running time=0s34ms

 

Python

import time ;

def Suqareroot(n,digits):
limit = 10**(digits+1)
a = 5*n
b = 5
while b < limit:
if a>= b:
a -= b
b +=10
else:
a *= 100
b = int(b/10) * 100 + 5
return int(b/100) def Int_Sum(n):
res = sum(map(lambda x:int(x),unicode(n)))
return res
if __name__=='__main__':
t0 = time.time()
limit = 1000000
result = 0
j = 1
for i in range(1,101):
if j*j == i:
j+=1
continue
result += Int_Sum(Suqareroot(i,100))
print result
t1 = time.time()
print "running time=",(t1-t0),"s" #
# running time= 0.039999961853 s

这样的 程序好无节操

from decimal import Decimal,getcontext
getcontext().prec=102
N = set(range(2,100)) - set([4,9,16,25,36,49,64,81])
s = 0
for n in N:
d = Decimal(n).sqrt()
s += sum([int(i) for i in str(d).replace(".","")[:100]])
print(s)

Project Euler 80:Square root digital expansion 平方根数字展开的更多相关文章

  1. Project Euler #80: Square root digital expansion

    from decimal import getcontext, Decimal def main(): n = int(raw_input()) p = int(raw_input()) getcon ...

  2. Project Euler 57: Square root convergents

    五十七.平方根收敛(Square root convergents) 二的平方根可以表示为以下这个无穷连分数: \[ \sqrt 2 =1+ \frac 1 {2+ \frac 1 {2 +\frac ...

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

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

  4. Project Euler 92:Square digit chains C++

    A number chain is created by continuously adding the square of the digits in a number to form a new ...

  5. Project Euler 90:Cube digit pairs 立方体数字对

    Cube digit pairs Each of the six faces on a cube has a different digit (0 to 9) written on it; the s ...

  6. (Problem 57)Square root convergents

    It is possible to show that the square root of two can be expressed as an infinite continued fractio ...

  7. Project Euler 59: XOR decryption

    计算机上的每个字母都对应一个独特的编号,普遍接受的标准是ASCII(美国信息交换标准代码).例如,大写字母的A的ASCII码是65,星号(*)的ASCII码是42,而小写字母k的代码是107. 一种现 ...

  8. Codeforces 715A. Plus and Square Root[数学构造]

    A. Plus and Square Root time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  9. Python练习题 034:Project Euler 006:和平方与平方和之差

    本题来自 Project Euler 第6题:https://projecteuler.net/problem=6 # Project Euler: Problem 6: Sum square dif ...

随机推荐

  1. Jexus 高并发请求的优化技巧 笔记

    Jexus web server 5.1 每个工作进程的最大并发数固定为1万,最多可以同时开启4个工作进程,因此,每台Jexus V5.1服务器最多可以到支持4万个并发连接.但是,按照linux系统的 ...

  2. php读取excel文件的实例代码

    php读取excel文件的实例代码. 代码: <?php /** * php读取excel文件 * by www.jbxue.com */ $this->loadexcel();//半酣p ...

  3. Nginx启动、停止与平滑重启

    如何启动Nginx:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 停止Nginx:可以发送向通信号给Nginx主进程的 ...

  4. 演出排期JavaScript

    <script language="JavaScript" type="text/javascript"> var diarydays=" ...

  5. ASP.NET MVC4学习笔记之总体概述

    断断续续使用ASP.NET MVC框架也有一年多了,也算积累了一些经验,唉,一直想写一些笔记好好总结一下,人太懒不想动笔,今天终于决定开始.希望自己能坚持下去. 这篇文章大体介绍ASP.NET MVC ...

  6. Mysql主从同步(复制)

    目录: mysql主从同步定义      主从同步机制 配置主从同步      配置主服务器      配置从服务器 使用主从同步来备份      使用mysqldump来备份      备份原始文件 ...

  7. C# 刷票程序

    上个月有人让我帮忙投票,我想要不写个程序给他多刷点得了,虽然这事情有悖原则,就当娱乐了.. 先上图 1.分析 既然是网页投票,那肯定可以伪造HTTP请求来实现刷票.需要分析的就是该网站到底采用了哪些防 ...

  8. boost-内存管理(scoped_array)

    # include <algorithm> string *p=new string[20];    scoped_array<string>  sp(p);    fill_ ...

  9. iOS多线程编程Part 2/3 - NSOperation

    多线程编程Part 1介绍了NSThread以及NSRunLoop,这篇Blog介绍另一种并发编程技术:NSOPeration. NSOperation & NSOperationQueue ...

  10. EntityFramework中的datetime2异常的解决

    (转)   最近使用.net的Entity Framework构建网站数据层,给一个实体的DATETIME类型的属性赋值时 突然莫名奇妙显示有一个类型不匹配的异常如下: System.Data.Sql ...