Project Euler 80:Square root digital expansion 平方根数字展开
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 平方根数字展开的更多相关文章
- Project Euler #80: Square root digital expansion
from decimal import getcontext, Decimal def main(): n = int(raw_input()) p = int(raw_input()) getcon ...
- Project Euler 57: Square root convergents
五十七.平方根收敛(Square root convergents) 二的平方根可以表示为以下这个无穷连分数: \[ \sqrt 2 =1+ \frac 1 {2+ \frac 1 {2 +\frac ...
- Python练习题 039:Project Euler 011:网格中4个数字的最大乘积
本题来自 Project Euler 第11题:https://projecteuler.net/problem=11 # Project Euler: Problem 10: Largest pro ...
- 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 ...
- 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 ...
- (Problem 57)Square root convergents
It is possible to show that the square root of two can be expressed as an infinite continued fractio ...
- Project Euler 59: XOR decryption
计算机上的每个字母都对应一个独特的编号,普遍接受的标准是ASCII(美国信息交换标准代码).例如,大写字母的A的ASCII码是65,星号(*)的ASCII码是42,而小写字母k的代码是107. 一种现 ...
- 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 ...
- Python练习题 034:Project Euler 006:和平方与平方和之差
本题来自 Project Euler 第6题:https://projecteuler.net/problem=6 # Project Euler: Problem 6: Sum square dif ...
随机推荐
- Android 官网提供的Custom-view 编译出错--error: No resource identifier found for attribute
error: No resource identifier found for attribute in custom-views from http://developer.android.com ...
- c++const小结
C++const简单整理,本文的首次是在博客园发布的,如有错误,欢迎大家指正 博客园链接:http://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.html ...
- Android开发之计算器(一)界面设计之activity_main布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- 修改Win7远程桌面端口
Win7与XP不同,在开启远程桌面修改端口后是无法直接访问的,原因是还未修改远程桌面在防火墙入站规则中的端口号. 修改远程桌面端口: [HKEY_LOCAL_MACHINE/SYSTEM/Curren ...
- Error LNK2005 从敌人到朋友
本人在写学生信息管理系统时遇到一个很头疼的错误——error LNK2005重复定义错误,苦思冥想百度谷歌bing之后都没能解决问题,于一清早刹那间觉得知道问题出在哪儿了,于是乎起床.开机.修改代码一 ...
- [转]Oracle学习记录 九 Prc C学习
经过前面的了解,现在想用C语言来编程了,搜索了很多东西,后来决定先用Pro C来进行学习 在安装完Oracle数据库后就可以进行编程了,里面有一个命令proc就是对程序进行预编译的. 在这记一下,这是 ...
- oracle-11g-配置dataguard
1.环境信息:系统:oracle-linux 5.7 数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit P ...
- (菜鸟要飞系列)三,基于Asp.Net MVC5的后台管理系统(用户的增删改查功能)
这些天被项目,考试整昏了头脑,没时间更新,我已经将这一部分全部做完了,现在把代码放上来,大家可以自己研究,有问题可以私聊,这里把图放上来 http://download.csdn.net/detail ...
- (ACM)C++ STL 训练(第一天)
因为老师说ACM考的是纯C++,所以打算抛弃VS的VC++不用了,针对纯C++的编译器有Intel Compiler(不过要钱),MinGw(个人用的),当然还有微软的VC++ 编译器,IDE你们可以 ...
- 微信消息处理JAXP-sax解析
package cn.zhaokai.sax; import java.io.IOException; import java.io.InputStream; import java.io.Print ...