Project Euler解题汇总 023 ~ 030

  RT,接着上次[url=http://eastsun.iteye.com/blog/204434]Euler Project解题汇总 013 ~ 022[/url]继续贴我写的解题代码。题目的难度相比之前的大了一些,有些题不是看一眼直接就能想出正确的方法了。建议想做这些题的同学先自己做下再来看我写的代码。

[url=http://projecteuler.net/index.php?section=problems&id=23]题目23[/url]:[color=orange]Find the sum of all the positive integers which cannot be written as the sum of two abundant numbers.[/color]
[color=red]题目简介[/color]:首先引入一个数学中的概念(呵呵,普及下数学知识):
  自然数n称为[url=http://baike.baidu.com/view/1596350.htm]盈数[/url](又称过剩数abundant number),如果除n之外的正约数之和大于n。
  [color=olive]譬如12是最小的盈数,因为:1+2+3+4+6 =16 > 12[/color]
  已知数学中的一个结论:所有大于28123的自然数都能分解为两个盈数之和。现在要求所有不能分解为两个盈数之和的自然数之和。(有点绕口:-))
[color=red]答案[/color]: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


[url=http://projecteuler.net/index.php?section=problems&id=24]题目24[/url]:What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
[color=red]题目简介[/color]:将数字0, 1, 2, 3, 4, 5, 6, 7, 8 ,9的所有排列按字典顺序排序,求排在第1,000,000位的那个数字。(注意:从第一位记起)
  [color=olive]譬如,数字0,1,2的所有排列按字典排序为:
    012 021 102 120 201 210
  第3位为 102[/color]
[color=red]答案[/color]: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)



[url=http://projecteuler.net/index.php?section=problems&id=25]问题25[/url]:[color=orange]What is the first term in the Fibonacci sequence to contain 1000 digits?[/color]
[color=red]题目简介[/color]:对于斐波那契数列:
   F1 =1, F2 =1, Fn =Fn-1 +Fn-2 (n>=3)
  求第一个为1000位数的项数。
[color=red]答案[/color]: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



[url=http://projecteuler.net/index.php?section=problems&id=26]问题26[/url]:[color=orange]Find the value of d < 1000 for which 1/d contains the longest recurring cycle.[/color]
[color=red]题目简介[/color]:我们知道有些分数不能用有限位的小数表示出来,那些分数的小数表示叫无限循环小数,其循环部分称为循环节,循环节的长度称为周期。
  现在求小于1000的自然数d,使得1/d的循环周期最大。
  [color=olive]譬如,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。[/color]
[color=red]答案[/color]: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



[url=http://projecteuler.net/index.php?section=problems&id=27]问题27[/url]:[color=orange]Find a quadratic formula that produces the maximum number of primes for consecutive values of n.[/color]
[color=red]题目简介[/color]:对于整数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的乘积
  [color=olive]譬如: a =1,b =41的时候,f(n) =n^2+n+41。
  f(0),f(1),...,f(39)都是质数,并且f(40)不是质数。
  所以此时len(f) =40。 (这个式子是Euler发现的)[/color]
[color=red]答案[/color]:-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



[url=http://projecteuler.net/index.php?section=problems&id=28]问题28[/url]:[color=orange]What is the sum of both diagonals in a 1001 by 1001 spiral?[/color]
[color=red]题目简介[/color]:将自然化按顺时针方向螺旋形依次排列形成一个方阵。
  求这样的1001*1001的方阵的两条对角线上数字之和。
  [color=olive]譬如,对于5*5的方阵:[/color]
    [color=red]21[/color] 22 23 24 [color=red]25[/color]
    20 [color=red]7[/color] 8 [color=red]9[/color] 10
    19 6 [color=red]1[/color] 2 11
    18 [color=red]5[/color] 4 [color=red]3[/color] 12
    [color=red]17[/color] 16 15 14 [color=red]13[/color]
  [color=olive]其对角线上的和为101。[/color]
[color=red]答案[/color]:669171001
//Scala
var num =1
var res =1
for(k <- 2.until(1001,2);p <- 1 to 4){
num += k
res += num
}
res


[url=http://projecteuler.net/index.php?section=problems&id=29]问题29[/url]:[color=orange]How many distinct terms are in the sequence generated by a^b for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100?[/color]
[color=red]题目简介[/color]:对 2 ≤ a ≤ 100 ,2 ≤ b ≤ 100:a^b一共产生了多少个不同的数。
[color=red]答案[/color]: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



[url=http://projecteuler.net/index.php?section=problems&id=30]问题30[/url]:[color=orange]Find the sum of all the numbers that can be written as the sum of fifth powers of their digits.[/color]
[color=red]题目简介[/color]:求所有能表示为其各位数字五次方之和的自然数的和。
  注意:虽然1 = 1^5,但由于这不是“各位数字五次方之和”,所以不包括在内。
[color=red]答案[/color]: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){ _+_ }
学Simulink——基于Simulink的PMSM直接转矩控制(DTC)与SVPWM对比 (如SVM-DTC),将一个控制周期Tc​分为两部分:前Ton​用有效矢量,后Toff​用零矢量,通过调节Ton​/Tc​减小脉动。:根据ψs​扇区(6个)、Te误差(±滞环带)、ψs​误差(±滞环带)选择8个基本电压矢量(6有效矢量+2零矢量)。:低速时需用电流模型(ψs​=Ls​is​+ψf​),高速时用电压模型(es​=ωψf​),避免纯积分漂移;:基于us​=Rs​is​+Ls​dtdis​​+es​(es​为反电动势),用电压模型估算ψs​; 阅读详情

相关推荐

PG-FP6编程器错误代码解析与高效排障实战指南

在嵌入式系统开发与量产烧录中,编程器是连接开发环境与目标硬件的重要桥梁。其工作原理是通过特定的通信协议(如UART、SWD)与微控制器(MCU)建立连接,完成程序代码的写入、擦除与校验。这项技术的核心价值在于确保固件能够准确、可靠地部署到硬件中,是产品从原型到量产的关键环节。在实际的工程实践中,尤其是在使用瑞萨(Renesas)PG-FP6这类编程器进行调试或批量生产时,工程师常会遇到各种通信失败、编程验证错误或电源异常等问题,这些问题往往以特定的错误代码形式呈现。深入理解这些错误代码背后的硬件连接、电源时

weixin_34387468的博客 581

欧拉计划:纠结的第23题,找出所有不能表示为两个过剩数之和的正整数之和,优化后7s可以执行完,再优化5秒

如果一个数的所有真因子之和等于这个数,那么这个数被称为完全数。例如,28的所有真因子之和为1 + 2 + 4 + 7 + 14 = 28,所以28是一个完全数。 如果一个数的所有真因子之和小于这个数,称其为不足数,如果大于这个数,称其为过剩数。 12是最小的过剩数,1 + 2 + 3 + 4 + 6 = 16。因此最小的能够写成两个过剩数之和的数字是24。经过分析,可以证明所有大于2812

GRC 2020

ADS2020与SystemVue2020Update1.0同机安装避坑指南:解决License冲突,实现EVM联合仿真

本文详细介绍了ADS2020与SystemVue2020 Update1.0同机安装的完整解决方案,重点解决License冲突问题,实现EVM联合仿真。通过合理的安装顺序、路径规划和License服务配置,确保两款EDA工具和谐共存,为射频与微波电路设计提供高效仿真环境。

weixin_30271335的博客 348

数据结构与算法练习(1)

数据结构与算法练习:给定一个数,获取到这个数最大的质因数,有循环和递归两种方式,后者性能更高;由两个3位数相乘得到的最大回文乘积,可通过单层循环和双层循环实现,性能相近;求最小的能够被1到20整除的正数,有3种实现方式,后两者性能更高;寻找并非盈数之和时,判断和时有暴力解法和二分法两种方式,二分法复杂度更低、效率更高;寻找第n个素数,需要判断一个数是否是素数,可以直接通过循环判断,也可以通过细分判断是否是大于2的偶数来判断,如果是大于2的偶数,则肯定不为素数,否则才需要通过循环判断,大大降低循环次数。

CUFEECR的博客 981

RouterOS网桥VLAN实战:从零构建安全隔离的二层虚拟网络

本文详细讲解了如何在RouterOS上利用网桥和VLAN功能,从零开始构建安全隔离的二层虚拟网络。通过分步实战演示,涵盖核心概念、网桥创建、PVID设置、VLAN规则配置及安全过滤,帮助网络管理员实现办公、访客与服务器网络的逻辑隔离与灵活管理,提升网络安全性。

u9v0w的博客 505

使用VS Code创建第一个Flutter工程

你可以使用任意文本编辑器结合命令行工具来开发Flutter应用。然而,我们推荐使用本文介绍的编辑器插件以获取更好的开发体验。这些插件提供了代码补全、代码高亮、widget辅助编辑等功能,以及为项目的运行和调试提供支持。推荐的开发工具有VS Code、Android Studio、IntelliJ。本文将重点介绍如何使用VS Code进行Flutter应用开发。

2501_91373349的博客 2129

问题23-所有不能被两个盈数相加的正整数之和

问题描述如下: “当一个数跟其真因子相加之和相等,那就称之为完美数(profect number) 如果一个数比其真因子相加之和还大,那就称之为亏数(deficient number),如果比真因子相加还小,那就称之为盈数(abundant number)。 12是最小的盈数,1+2+3+4+6=16&gt;12.最小的两个盈数相加的正整数是14,我们可以知道大于28123的正整数都可...

402

头歌操作系统 课堂练习4.2:页式内存管理 答案 无解析

头歌操作系统 课堂练习4.2:页式内存管理 答案 无解析

kercii的博客 1万+

Project Euler problem 12

就是问前多少项的和的因子个数大于500 输出这个和 最裸的想法就是枚举n,算出前n项和的因子个数 注意算一个数x的因子个数可以在sqrt(x)时间内算出来 但是前n项和是n^2级别的所以。 这样算出来还是 n^2复杂度的。 其实可以进行优化。 由于我们已经知道前n项和是 n * (n + 1) /2 而n和(n + 1)必然有一个偶数 那么前n个数的和必然能表示成

水 738

Titans:谷歌新型神经记忆架构,突破 Transformer 长序列处理的瓶颈

Titans 是谷歌推出的新型神经网络架构,通过神经长期记忆模块突破 Transformer 在处理长序列数据时的瓶颈,支持并行计算,显著提升训练效率。

士多啤梨先生の博客 994

【推荐100个unity插件】unity实现交互式火焰 —— Ignis

Ignis是一款Unity互动式消防系统插件,可轻松将物体转换为可燃物。支持固体、植被、蒙皮网格和地形树木等多种对象类型,提供火焰蔓延、熄灭等效果。安装需通过Unity Package Manager添加Visual Effects Graph,并按照指引转换目标物体材质。使用盒型碰撞体或网格计算燃烧区域,可自定义火焰参数和视觉效果。内置多种转换选项,如Flammable Vegetation、Flammable Skinned Mesh等,适用于不同场景需求。注意使用前需备份材质和地形数据,并提供性能优化

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2241

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

欧拉计划是一个在线解题网站,题目以各类数学问题为主,通常需要结合一定的数学与编程知识,写出适当的程序求解问题(详细介绍可以参见我的文章)。相比于力扣等刷题网站,欧拉计划上的题目有着更丰富的知识背景,在解答题目的过程中常能学习新的数学与算法知识,享受解题愉悦的同时也能颇有收获。 在我的解题过程中,我尽量追求对每道题给出最优的解法,然后写文章把我的思路与代码记录下来。在每篇文章中,我首先将题目翻译成了中文,然后给出了我的解题思路和对应的代码,代码可以在这个仓库中找到。希望这些文章能够为大家带来启发,发现更好的

metaquant的博客 6998

扫地机器人行业 企业篇-产业总部地理分布

中国扫地机器人产业呈现区域集聚特征,广东省以13家企业领跑全国,其中深圳独占9家(如大疆、云鲸智能等),佛山、广州、东莞各有分布。江苏省6家企业主要集中在苏州(科沃斯、追觅科技等)。北京聚集了石头科技、小米等4家品牌。浙江、山东、湖南等地也有代表性企业分布。国际品牌方面,美国iRobot、韩国三星/LG、日本松下等均在各自国家设立总部,而戴森、飞利浦等欧洲品牌则将中国运营中心设在上海或苏州。值得注意的是,部分品牌如由利、宝家丽虽为外资起源,但主要运营实体已落户中国。

智能硬件研发,欢迎交流 364

Project Euler in Java [001-040]

无脑而暴力·打怪且升级

安如衫的刷怪之路 2044

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Project Euler Problem 12 (C++和Python代码实现和解析)

Problem 12 : Highly divisible triangular number The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The fir...

jiafengfu的优快云博客 518

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

字典序排列

排列指的是将一组物体进行有顺序的放置。例如,3124是数字1、2、3、4的一个排列。如果把所有排列按照数字大小或字母先后进行排序,我们称之为字典序排列。0、1、2的字典序排列是:012 021 102 120 201 210 数字0、1、2、3、4、5、6、7、8、9的字典序排列中第一百万位的排列是什么?package EULER24;import java.util.Arra

弓一的博客 2218

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【ProjectEuler】ProjectEuler_023

// Problem 23 // 02 August 2002 // // A perfect number is a number for which the sum of its proper divisors is exactly equal to the number. For example, the sum of the proper divisors of 28 would be 1

sytzz的专栏 756

[Project Euler] 来做欧拉项目练习题吧: 题目012

                                   [Project Euler] 来做欧拉项目练习题吧: 题目012                                                       周银辉   问题描述: The sequence of triangle numbers is generated by adding the natur...

weixin_34302798的博客 179

微软技术日报 11-09:.NET 8 与 9 明日同时停止支持,注册表编辑器出了 WinUI 3 版

今天这四条消息的共同点是收口。.NET 8 和 9 的支持期到点,注册表编辑器的新界面只放在仓库里给人看,GitHub 把一类危险触发器按住默认,微软在安全报告里把防线从地址黑名单挪到行为。收口并不等于关门。.NET 10 还在支持期里,被按住的触发器可以用策略按文件放回来,实验室里的样例随时可能变成产品。区别在于这些动作要有人签字,不再是默认开着。如果今天只做一件事,去看一眼构建机上的 .NET 版本。明天之后,8 和 9 的漏洞补丁不会再来了。

海盗Sharp的博客 390

微软技术周报 11-02~11-09:VS Code 混装 Claude 与 Codex、EF Core 11 静默改行为、.NET 11 倒计时

11 月 6 日,Power Platform 通过消息中心通知管理员,Copilot Studio、Power Automate 和 Power Apps 里所有跑在 Anthropic Claude、xAI Grok 以及旧版 GPT 上的 prompt,12 月 2 日自动迁移到 GPT-6 系列,档位价格不变,模型选择收窄到一条产品线。效果是这样的:让 Claude 评审一个 Copilot chat 写出的方案,或者把同样的任务交给 Codex,两边并排跑在同一个会话里。更要紧的是下周的时间线。

海盗Sharp的博客 992

一款基于 .NET 开源、免费的数据库自治诊断平台

DBPilot。它解决的是 DBA 日常工作中最耗时的痛点:性能趋势分析、Top SQL 定位、阻塞与死锁排查,原本散落在多个工具和脚本里的活,现在一个 Web 控制台全搞定。DBPilot 是一个自托管的数据库自治诊断平台。它持续采集实例的性能数据,在同一个 Web 控制台里完成日常 DBA 工作流:性能趋势与 AAS 负载拆解、Top SQL、执行计划变更跟踪、缺失索引建议、索引使用与碎片、阻塞分析、死锁分析、慢日志。

专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享。这里聚焦了大量的C#/.NET/.NET Core优质文章、开源项目、实用工具和学习、工作、面试心得。 192

.NET 11 - 尝试一下Blazor中Virtualize组件的Scroll新特性

2026年11月10日,微软发布了.NET 11正式版!这是一个STS版本, 微软提供两年支持。同时.NET 8 和 .NET 9 在 2026 年11月10日开始结束支持。.NET11处于Release Candidate 3阶段的时候,只支持在Visual Studio 2026 Insiders 和 Visual Studio Code(安装了C# Dev Kit.NET extension)中创建.NET11项目。

limingdinghao的博客 169

Keycloak.Admin.Sdk 26.8.1-preview.3 发布:从管理 API 到应用协议的 .NET 10 SDK

如果你的项目正在使用 Keycloak 26.8.1,欢迎通过 NuGet 体验 **26.8.1-preview.3**,也欢迎提交具体接口、协议或运行环境下的使用反馈。

ChaITSimpleLove的博客 358

Log4net .net framework4.6测试

路径要放在UI.EXE的同等路径下。

备忘 42

按Ctrl键会引发几次按键消息

                                                                           何志丹(一),新建一个单文档工程CtrlEg。(二),为CCtrlEgView的WM_KEYDOWN消息和WM_KEYUP消息添加响应函数。具体代码如下:void CCtrlEgView::OnKeyDown(UINT nChar, UINT nRe

闻缺陷则喜何志丹 1869

C# + .NET 8 + WPF + HALCON25.11

在解决方案资源管理器,右键→【设为启动项目】顶部菜单:【生成】→【生成解决方案】,看输出窗口,无报错按F5启动调试点击按钮【加载测试图】:图片显示,缺陷自动画红框,表格输出坐标。

qq_36657291的博客 309
上一篇: Project Euler解题汇总 013 ~ 022
下一篇: 按字典顺序生成所有的排列
JavaSxy
博客等级 码龄21年 1粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值