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. 分享:PHP数组排序总结

    本文内容:PHP二维数组排序,PHP数组排序总结. php数组排序是PHP学习中最基础也是最重要的一部分. 1.常规数组的排序 常规数组是指数组各元素均为字符串或数字,这与这样的数组,我们可以采用so ...

  2. Linux下iptables拦截Nginx的问题

    环境:CentOS 6.4 X64,Nginx 1.5.3 问题:配置好Nginx后,加入了“iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT” ...

  3. linux修改挂载目录

    linux修改挂载目录   修改扩展磁盘默认的挂载点/home到/data   [root@localhost ~]# df -h 文件系统       容量  已用  可用 已用%% 挂载点 /de ...

  4. 简单的Datatable转List,Json

    这里用到了Newtonsoft.Json,下载地址:http://json.codeplex.com/ 1.根据不同的Model转为对应的List public static List<Mode ...

  5. 常用设备类别及其GUID

    Class ClassGuid 说明 1394 6BDD1FC1-810F-11D0-BEC7-08002BE2092F 1394主控制器 CDROM 4D36E965-E325-11CE-BFC1- ...

  6. matlab实现贝塞尔曲线绘图pdf查看

    贝塞尔曲线绘图方法: %Program 3.7 Freehand Draw Program Using Bezier Splines %Click in Matlab figure window to ...

  7. 10.30Daily Scrum

    出席人员 任务分配完成情况 明天任务分配 王皓南 研究代码,讨论实现方法及实现的动能 研究代码,学习相应语言,讨论设计思路 申开亮 研究代码,讨论实现方法及实现的动能 研究代码,学习相应语言,讨论设计 ...

  8. android开发,assets下面的资源文件不会变化/改动

    我再调试asserts下面的资源文件,发现我改动assets下面的文件内容,在真机上测试的时候还是最原先的内容,没有变,后来,卸载,重装就ok了. 原因: assets下面的资源文件,若覆盖重装,则里 ...

  9. Android ADB 端口占用问题解决方案

    问题描述: The connection to adb is down, and a severe error has occured. You must restart adb and Eclips ...

  10. ACCESS数据库C#操作类(包含事务)

    转自http://blog.csdn.net/allen3010/article/details/6336717 这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的 ...