RT,接着上次
Euler Project解题汇总 013 ~ 022继续贴我写的解题代码。题目的难度相比之前的大了一些,有些题不是看一眼直接就能想出正确的方法了。建议想做这些题的同学先自己做下再来看我写的代码。
题目23:
Find the sum of all the positive integers which cannot be written as the sum of two abundant numbers.
题目简介:首先引入一个数学中的概念(呵呵,普及下数学知识):
自然数n称为
盈数(又称过剩数abundant number),如果除n之外的正约数之和大于n。
譬如12是最小的盈数,因为:1+2+3+4+6 =16 > 12
已知数学中的一个结论:所有大于28123的自然数都能分解为两个盈数之和。现在要求所有不能分解为两个盈数之和的自然数之和。(有点绕口:-))
答案:4179871
//Scala
val MAX =28123
val fs = new Array[Boolean](MAX+1)
for(i <- 0 to MAX){
var k = 2
var s = 1
while(k*k < i){
if(i%k == 0) s =s+k+i/k
k += 1
}
if(k*k == i) s += k
fs(i) = s>i
}
var res =0
for(n <- 1 to MAX){
val f =1.to(n/2).forall{k => !(fs(k)&&fs(n-k)) }
if(f) res += n
}
res
题目24:What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
题目简介:将数字0, 1, 2, 3, 4, 5, 6, 7, 8 ,9的所有排列按字典顺序排序,求排在第1,000,000位的那个数字。(注意:从第一位记起)
譬如,数字0,1,2的所有排列按字典排序为:
012 021 102 120 201 210
第3位为 102
答案:2783915460
//Scala
def nth(n:BigInt,a:Array[Char]):String ={
var idx = a.length -1
var fac = 1.to(idx).foldLeft(1:BigInt){ _*_ }
var cpy = n
for(i <- 0 until idx){
var k = (cpy/fac).intValue
var t = a(i+k)
for(p <- (k+i).until(i,-1)) a(p) =a(p-1)
a(i) = t
cpy = cpy%fac
fac = fac/(idx-i)
}
String.valueOf(a)
}
nth(1000000-1,"0123456789".toCharArray)
问题25:
What is the first term in the Fibonacci sequence to contain 1000 digits?
题目简介:对于斐波那契数列:
F1 =1, F2 =1, Fn =Fn-1 +Fn-2 (n>=3)
求第一个为1000位数的项数。
答案:4782
//Scala
var fib:Stream[BigInt] = Stream.cons(1,Stream.cons(1,
fib.zip(fib.tail).map{case(x,y) => x+y}
))
fib.findIndexOf{ _.toString.length == 1000 }+1
问题26:
Find the value of d < 1000 for which 1/d contains the longest recurring cycle.
题目简介:我们知道有些分数不能用有限位的小数表示出来,那些分数的小数表示叫无限循环小数,其循环部分称为循环节,循环节的长度称为周期。
现在求小于1000的自然数d,使得1/d的循环周期最大。
譬如,d从2到10的小数表示为:(括号里面的为循环节)
1/2 = 0.5
1/3 = 0.(3)
1/4 = 0.25
1/5 = 0.2
1/6 = 0.1(6)
1/7 = 0.(142857)
1/8 = 0.125
1/9 = 0.(1)
1/10 = 0.1
其中d=7时的循环节为142857,其长度为6。
答案:983
//Scala
def cycle(n:Int):Int ={
var k:BigInt =10
var c =1
while((k-1)%n != 0){
k =k*10
c +=1
}
c
}
var max =0
var res =0
for( n <- 2 until 1000;if !(n%2==0||n%5==0)){
var c =cycle(n)
if(c>max){
max =c
res =n
}
}
res
问题27:
Find a quadratic formula that produces the maximum number of primes for consecutive values of n.
题目简介:对于整数a,b,定义函数 f:
f(n) = n*n + a*n +b
又记len(f)表示f(n)从n =0开始能连续生成素数(质数)的最大长度。也就是:
len(f) = max{n : f(0),f(1),...,f(n-1)都是素数}
现在对|a|<1000,|b|<1000,求a,b使得len(f)最大。
输出a,b的乘积
譬如: a =1,b =41的时候,f(n) =n^2+n+41。
f(0),f(1),...,f(39)都是质数,并且f(40)不是质数。
所以此时len(f) =40。 (这个式子是Euler发现的)
答案:-59231 (a = -61,b = 971)
//Scala
val ps:Stream[Int] = Stream.cons(2,
Stream.from(3).filter{ n =>
ps.takeWhile(p => p*p <= n).forall(n%_ !=0)
})
def suit(a:Int,b:Int,n:Int):Boolean ={
val v = n*n+a*n+b
if(v <= 0) false
else ps.takeWhile{p =>p*p<=v}.forall{ v%_ !=0 }
}
var max = 40
var res = (1,41)
for(a <- -999 to 999;b <- ps.takeWhile{_<1000};if suit(a,b,max)){
var n =0
while(suit(a,b,n)) n += 1
if(n > max){
res =(a,b)
max =n
}
}
res._1*res._2
问题28:
What is the sum of both diagonals in a 1001 by 1001 spiral?
题目简介:将自然化按顺时针方向螺旋形依次排列形成一个方阵。
求这样的1001*1001的方阵的两条对角线上数字之和。
譬如,对于5*5的方阵:
21 22 23 24
25
20
7 8
9 10
19 6
1 2 11
18
5 4
3 12
17 16 15 14
13
其对角线上的和为101。
答案:669171001
//Scala
var num =1
var res =1
for(k <- 2.until(1001,2);p <- 1 to 4){
num += k
res += num
}
res
问题29:
How many distinct terms are in the sequence generated by a^b for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100?
题目简介:对 2 ≤ a ≤ 100 ,2 ≤ b ≤ 100:a^b一共产生了多少个不同的数。
答案:9183
/**
&#Euler029.scala
@author Eastsun
*/
import scala.util.Sorting.quickSort
object Euler029 extends Application {
var buf =new Array[BigInt](99*99)
for(a <- 2 to 100;b <- 2 to 100){
var ba:BigInt =a
buf((a-2)*99+b-2) =ba.pow(b)
}
quickSort(buf)
var res =0
var pre:BigInt =0
for(n <- buf)
if(n != pre){
res += 1
pre = n
}
println(res)
}
(for(a <- 2 to 100; b <- 2 to 100) yield (a: BigInt).pow(b)).toSet.size
问题30:
Find the sum of all the numbers that can be written as the sum of fifth powers of their digits.
题目简介:求所有能表示为其各位数字五次方之和的自然数的和。
注意:虽然1 = 1^5,但由于这不是“各位数字五次方之和”,所以不包括在内。
答案:443839
//Scala
10.to(1000000).filter{ n =>
var t =n
var s =0
while(t != 0){
var r =t%10
s += r*r*r*r*r
t = t/10
}
s ==n
}.foldLeft(0){ _+_ }
分享到:
相关推荐
在提供的压缩文件“project_euler解题表格.docx”中,很可能是博主Linuke分享了他的Project Euler解题过程和经验。这个表格可能包含了他对各个问题的思考、代码实现以及解决问题所花费的时间,对于其他学习者来说是...
标题 "下载Project Euler题目" 暗示了这个压缩包可能包含了与解决Project Euler问题相关的Java源代码。Project Euler是一个在线平台,提供了大量的数学和计算机科学问题,旨在提高编程技能和数学理解。这些问题通常...
【标题】"ProjectEuler1-16代码"所涉及的知识点主要集中在计算机编程和算法设计上,尤其针对初学者和编程爱好者。Project Euler是一个在线平台,它提供了一系列的数学和计算机科学问题,旨在通过解决这些问题来提升...
【标题】"Project Euler 第22题"是一个著名的编程挑战,源自Project Euler网站,这是一个鼓励人们通过编程解决数学和计算问题的在线平台。这道题目通常涉及到字符串处理、排序以及数学计算,旨在锻炼编程者的问题...
题目:Project Euler问题5——寻找最小公倍数 在Project Euler的问题集中,问题5要求我们找到能被1至20所有数字整除的最小正整数。这个问题实际上是在寻找这组数字的最小公倍数(LCM)。对于较小的参数值,如本例中...
【项目欧拉(Project Euler)】是一个非常受欢迎的在线数学和计算机编程挑战平台,它吸引着全球的程序员和数学爱好者参与。项目欧拉的问题通常涉及数学、算法和计算机科学,鼓励解决问题并学习新技能。本压缩包...
【标题】"project euler5.rar_ACM_project" 涉及的是ACM竞赛相关的编程项目,特别是Project Euler的第五部分。Project Euler是一个在线数学和计算机科学的挑战项目,旨在提高编程技能并解决复杂的数学问题。这个...
《ACM项目:Project Euler问题集解码》 在编程竞赛和算法研究领域,ACM(International Collegiate Programming Contest)项目具有极高的地位,而Project Euler则是其中一道独特的风景线。这个项目旨在挑战参赛者的...
《ACM项目:Project Euler第三部分解题代码详解》 Project Euler是一个著名的在线数学与计算机科学问题集,旨在挑战编程者的思维能力和算法技巧。在这个压缩包"project euler3.rar_ACM_project"中,包含了10个已经...
《使用汇编语言解决Project Euler问题的探索》 在IT领域,编程挑战是提升技能、锻炼思维的重要方式,其中Project Euler以其独特的数学与计算机科学相结合的特性,深受程序员喜爱。本项目聚焦于"Project Euler",它...
Project Euler 是一个在线平台,提供了一系列数学和计算机科学的挑战问题,旨在提高解题技巧,同时也为编程爱好者提供了练习和学习的机会。这个项目通常涉及到算法、数学和编程的结合,鼓励用户通过编写高效的代码来...
《MATLAB实现Project Euler问题详解》 Project Euler是一个著名的在线数学和计算机科学挑战平台,它提供了许多具有挑战性的问题,旨在提升编程技能和数学理解。本资料包“matlab用不同编程语言实现的各种Project ...
全部在linux下运行通过并得到结果,因为是个人所做,所以不保证是最优结果,仅供交流学习 因为是个人联系所做,所以代码中没有注释,不过我相信只要你真的有去思考题目也是能知道我为什么这样做 ...
"Project Euler: Project Euler 问题的解决方案"是一个与编程挑战相关的项目,主要集中在使用JavaScript解决数学和计算问题。Project Euler是一个著名的在线平台,它提供了一系列的数学和计算机科学问题,旨在提升...
《项目欧拉:多语言实现的ProjectEuler.net问题解决方案》 Project Euler是一个深受程序员喜爱的在线挑战平台,它提供了一系列涉及数学、计算机科学和算法的难题,旨在提高编程技能和解决问题的能力。这个名为...
欧拉计划(Project Euler)是一个在线平台,旨在通过一系列具有挑战性的数学和计算机科学问题来提升编程技巧。这些问题设计巧妙,通常需要运用到数学、算法和编程知识来解决。参与欧拉计划,不仅可以锻炼编程能力,...
项目欧拉解决方案该存储库包含我对 Project Euler (projecteuler.net) 上发现的编程问题的所有答案。 每个解决方案都是用 Java 编写的,旨在从命令行运行。 解决方案文件中将提供指向相关欧拉问题的链接。 某些解决...
在编程世界中,Project Euler 是一个著名的在线平台,它提供了大量的数学和计算机科学问题,旨在通过挑战参与者解决这些问题来提高其编程和问题解决能力。这个压缩包“Project-Euler:projecteuler.net 上问题的解决...
顾名思义,projecteuler-solutions是站点Project Euler的解决方案的集合。 该站点旨在为Euler项目提供完整而准确的解决方案清单。这个网站的目的是什么? 在一个棘手的问题上奋斗了数小时或数天之后,您最终可能会...
这个"Euler project(1-5).zip"压缩包包含了前五个问题的MATLAB解决方案,每个问题都对应一个".mlx"文件。这些文件是MATLAB Live Scripts,是一种集代码、文本、图像和输出于一体的交互式文档格式,便于学习和理解...