当前位置:

首页 > 编程开发 > Project Euler #1 的高效解法:避免浮点精度误差的整数运算实现

Project Euler #1 的高效解法:避免浮点精度误差的整数运算实现

计算小于n的能被3或5整除的正整数之和时,大数场景下浮点除法会引发舍入误差。采用纯整数运算,利用等差数列和公式与容斥原理,通过调整运算顺序确保整除,可避免精度问题。

今天这道题看似简单,但当输入规模大到 \(n > 10^{16}\) 时,一个常见的数学解法会悄悄翻车——原因出在浮点精度上。下面把问题拆开,看看怎么用纯整数运算彻底搞定。

Project Euler 第 1 题要求计算所有小于 \(n\) 的、能被 3 或 5 整除的正整数之和。高效解法当然不是逐个遍历,而是用等差数列求和公式加上容斥原理:

  • 小于 \(n\) 的 3 的倍数之和 = 3 + 6 + … + last_3
  • 小于 \(n\) 的 5 的倍数之和 = 5 + 10 + … + last_5
  • 小于 \(n\) 的 15 的倍数之和(即 3 和 5 的公倍数)要减掉一次,避免重复计数

原始代码逻辑上没毛病,但关键缺陷出在混合使用浮点运算和整数运算上。来看这段写法:

sums_of_3 = ((3 + last_num_3) / 2) * math.floor(last_num_3 / 3)

这里的 \((3 + \text{last\_num\_3}) / 2\) 会触发 Python 的浮点除法 /,即便分子是偶数,结果也会被转为 float 类型。而 IEEE 754 双精度浮点数只有大约 53 位有效二进制精度(约 15–17 位十进制),一旦数值超过 \(2^{53} \approx 9.007 \times 10^{15}\),相邻可表示的浮点数间隔就大于 1,整数加减就开始出现舍入误差。比方说,示例里 sums_of_3 + sums_of_5 本来应该是奇数 9007199317793343,却被错误表示成 9007199317793344.0,最终结果偏差了 1。

✅ 正确的做法是全程使用整数算术,通过调整运算顺序避免除法提前引入浮点:

  • 等差数列和公式:sum = (首项 + 末项) × 项数 ÷ 2
  • 项数 = last_num // k(k = 3, 5, 15)
  • 因为 (首项 + 末项) 与项数中必有一个是偶数(等差数列项数公式保证),所以 (首项 + 末项) × 项数 必为偶数,可以安全地用整数除法 //

优化后的完整实现如下:

def sum_multiples_of_3_or_5(n):
    if n <= 0:
        return 0

    def sum_divisible_by(k):
        # 最大小于 n 的 k 的倍数
        last = (n - 1) // k * k
        # 项数
        count = last // k
        # 等差数列和:(首项 + 末项) * 项数 // 2
        return (k + last) * count // 2

    return sum_divisible_by(3) + sum_divisible_by(5) - sum_divisible_by(15)

? 关键改进点总结:

  • 用 // 替代 /,确保所有中间结果都是 int;
  • 把除以 2 延迟到乘法之后,利用 \((k + \text{last}) \times \text{count}\) 必为偶数的数学性质,避免精度损失;
  • 封装成 sum_divisible_by(k) 函数,提升可读性和复用性;
  • 支持超大整数(Python int 无限精度),实测 \(n = 10^{20}\) 也能瞬间返回精确结果。

这个解法时间复杂度 O(1),空间复杂度 O(1),彻底摆脱了循环和浮点陷阱,是解决 Project Euler #1 的工业级稳健方案。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发
相关文章 更多
微软推出Project Zenith:面向Windows 11开发者的AI硬件加速方案
微软推出Project Zenith:面向Windows 11开发者的AI硬件加速方案

微软于9月5日推出Project Zenith,旨在为Windows 11开发者提供更高效的AI开发体验。该项目目前仅支持配备超过64GB统一内存及250GB/s内存带宽的特定硬件,首发适配AMD Ryzen AI Halo设备。通过此项目,开发者可在本地运行参数超过300亿的AI模型,后续将分阶段扩展至更多合作伙伴设备。

总投资4700万亿韩元!韩国落地三大超级产业项目,构建Project Trinity格局
总投资4700万亿韩元!韩国落地三大超级产业项目,构建Project Trinity格局

韩国发布ProjectTrinity战略,投资4700万亿韩元,聚焦半导体、物理AI和AI数据中心,三星与SK集团落实本土投资,旨在将韩国从零部件供应商升级为全球AI基础设施核心枢纽。

微软确认:6 月 8 日 Xbox 发布会没有“Project Helix”主机新消息
微软确认:6 月 8 日 Xbox 发布会没有“Project Helix”主机新消息

距离Xbox Games Showcase 2026正式开场还有不到十天,关于这场发布会到底会放出什么重磅消息,圈内已经猜得热火朝天。不过,微软Xbox首席运营官Matt Booty今天在自家播客里提前泼了一盆冷水:6月8日的发布会上,不会有任何关于次世代主机“螺旋计划”(Project Helix

谷歌AI眼镜Project Aura亮相,中国厂商合作打造
谷歌AI眼镜Project Aura亮相,中国厂商合作打造

谷歌AI眼镜ProjectAura在开发者大会上亮相,展示了两种形态:音频眼镜和显示眼镜,均旨在解放双手、回归现实。该眼镜搭载AndroidXR系统,由谷歌与中国厂商Xreal合作开发,融合AI交互、空间界面与沉浸内容,提供轻量化的日常XR体验。配套应用包括沉浸式地图导航、全景视频观看、三维绘画等,展现了丰富的应用潜力。

XREAL确认Project Aura智能眼镜确认年内出货
XREAL确认Project Aura智能眼镜确认年内出货

XREAL确认其ProjectAura智能眼镜将于2026年底前出货。该眼镜基于安卓XR平台,采用分离式设计,整机重量低于90克,侧重娱乐体验。设备搭载自研芯片与高通平台,通过外接模块实现续航与交互平衡,并集成多模态AI以实现内容的空间化转换。

Sublime如何实现项目管理?Sublime Project项目配置文件详解
Sublime如何实现项目管理?Sublime Project项目配置文件详解

Sublime Text 项目配置需手动创建和重载 .sublime-project 文件,改 settings 后必须执行 Project → Reload Project 或快捷键重载,仅保存无效;folders 为必填项且格式严格,路径须用正斜杠、UTF-8 编码、避免中文空格;多文件夹项目应

消息称微软下一代 Xbox 主机仍偏向传统游戏主机,或屏蔽 Steam 平台
消息称微软下一代 Xbox 主机仍偏向传统游戏主机,或屏蔽 Steam 平台

消息称微软下一代 Xbox 主机仍偏向传统游戏主机,或屏蔽 Steam 平台 关于微软下一代Xbox(代号“螺旋计划”)的讨论,最近又有了新动向。知名爆料人“摩尔定律已死”(Moore‘s Law is Dead)在其最新发布的视频中,给出了一个颇为明确的判断:这台新机器,骨子里恐怕还是一款偏向传统

Take-Two CEO 泽尔尼克:内存价格不会影响索尼 PS6、微软“Project Helix”主机上市进度
Take-Two CEO 泽尔尼克:内存价格不会影响索尼 PS6、微软“Project Helix”主机上市进度

Take-Two CEO 泽尔尼克:内存价格不会影响索尼PS6、微软“Project Helix”主机上市进度 游戏行业最近掀起的内存短缺讨论,让不少玩家和投资者心里犯起了嘀咕,特别是关于下一代游戏主机的命运。这不,就在上周,Take-Two Interactive的首席执行官施特劳斯·泽尔尼克在一

VSCode安装ProjectManager 快速切换VSCode多个项目目录
VSCode安装ProjectManager 快速切换VSCode多个项目目录

Project Manager插件需手动保存项目才能切换,因其不自动发现无特征文件(如package.json)的目录;命令无效、列表为空或路径失效等问题,均源于未正确配置projects.json或路径不可用。 这里有个核心概念需要先明确:Project Manager 插件本身并不会自动帮你发现

创新推出 PROJECT WATCHER 直播摄像头套件:提供 35mm 定焦及 20-55mm 变焦双机位,629 元
创新推出 PROJECT WATCHER 直播摄像头套件:提供 35mm 定焦及 20-55mm 变焦双机位,629 元

创新推出 PROJECT WATCHER 直播摄像头套件:提供 35mm 定焦及 20-55mm 变焦双机位,629 元 直播设备市场又添新玩家。4月2日,创新科技在京东上架了一款名为PROJECT WATCHER的直播摄像头套件。这款产品的设计思路颇为独特——它采用分体式设计,一套设备里直接包含了

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Postman macOS版
Postman macOS版
Mac

Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

Docker Desktop macOS版
Docker Desktop macOS版
Mac

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

Android Studio macOS版
Android Studio macOS版
Mac

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

WINDOWS 更多
Postman Windows版
Postman Windows版
Windows

Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

Docker Desktop Windows版
Docker Desktop Windows版
Windows

Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

Android Studio Windows版
Android Studio Windows版
Windows

Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,