news 2026/6/2 15:35:58

惊人发现:仅 17% 的 64 位整数可由两个 32 位整数相乘得到!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
惊人发现:仅 17% 的 64 位整数可由两个 32 位整数相乘得到!

Daniel Lemire 及其博客介绍

Daniel Lemire 是一位软件性能专家,在全球科学家排名中位居前 2%(斯坦福大学/爱思唯尔 2025 年排名),也是 GitHub 上最受关注的前 1000 名开发者之一。他于 2004 年创办了这个博客,目前已有 2370 篇文章和 16294 条审核通过的评论,其博客在领先的科技新闻聚合平台 Hacker News 上,跻身最受欢迎的前 50 名博客之列。

他的主页是 https://lemire.me/en/ ,GitHub 个人资料是 https://github.com/lemire 。若企业需要帮助,可联系他,他提供私人讲座、培训、咨询服务,也承接赞助的开源项目(https://lemire.me/en/?v=1#consulting )。他不接受任何广告,但可在 GitHub 上赞助他的开源工作(https://github.com/sponsors/lemire )。

还可加入超过 12500 名邮件订阅者的行列,在 GitHub 上关注他,在 X 上关注他(https://x.com/intent/follow?screen_name=lemire&show_count=true&size=large ,超过 30000 名粉丝),也能在 Telegram(https://t.me/dlemire )上关注本博客。

近期文章与评论

近期文章有:具身认知与能动 AI(https://lemire.me/blog/2026/05/28/embodied-cognition-and-agentic-ai/ )、利用 AVX - 512 超快速解析 IPv6 地址(https://lemire.me/blog/2026/05/23/parsing-ipv6-addresses-crazily-fast-with-avx-512/ )等。

近期评论有:Nik 在所有 64 位整数中,只有 17% 是两个 32 位整数的乘积(https://lemire.me/blog/2026/05/22/only-17-of-all-64-bit-integers-are-products-of-two-32-bit-integers/#comment-677782 )下的评论等。

页面与存档信息

页面包括技术简史(https://lemire.me/blog/a-short-history-of-technology/ )、关于我(https://lemire.me/blog/about-me/ )等。

存档信息展示了从 2004 年 1 月到 2026 年 5 月各月的文章数量,如 2026 年 5 月有 6 篇,2026 年 4 月有 5 篇等。

其他信息

其他信息有登录(https://lemire.me/blog/wp-login.php )、文章订阅源(https://lemire.me/blog/feed/ )等。

64 位整数乘积问题探讨

在软件开发中,两个整数相乘结果以固定位数存储可能溢出,如 8 位整数 127 乘以 127,以 8 位无符号整数存储结果为 1,实际完整乘积 16129 需 16 位表示,由此引出“完整乘积”概念,两个 32 位整数的完整乘积通常用 64 位表示。

一直思考的问题是:所有 64 位整数中,有多大比例可表示为两个 32 位整数的乘积?关注此问题的原因在于,常设计哈希函数,几年前设计的超快速哈希函数 clhash(https://github.com/simdhash/clhash )采用常用于加密应用的乘法方式,试图证明其比基于标准乘法的技术更具优势。

以一个简单的 32 位整数哈希函数为例,它将整数的高 16 位与低 16 位相乘,但该哈希函数无法产生所有 32 位哈希值,因为伟大的数学家 Erdös 证明,当 `n` 足够大时,所有 `2n` 位数值中,能由两个 `n` 位数值相乘得到的比例趋近于零。

对于 16 位整数相乘得到 32 位乘积的情况,可通过暴力枚举解决,约五分之一的 32 位数字是两个 16 位整数的乘积,约 80% 的 32 位整数无法通过这种方式得到,但暴力枚举无法扩展到 32 位情况。

对于 32 位整数相乘得到 64 位乘积的情况,通过函数 simpleHighLowHash 产生的 64 位值占所有 64 位值的比例可精确计算。Webster(https://blue.butler.edu/~jewebste/ )及其同事建立了相关数学理论(https://arxiv.org/pdf/1908.04251 ),他还公开了代码(https://github.com/jewebste/multiplication-table-problem )。经计算,有 3215709724700470902 个 64 位(无符号)整数可以表示为两个 32 位整数的乘积,约占所有可能值的 17%。

寻找相乘因数的方法

若已知一个 64 位整数,找出相乘得到它的两个 32 位整数的一种方法是,先对该整数进行完整的质因数分解,然后利用这些质因数构建所有小于 `2^32` 的可能因数。从只包含 `1` 的候选集开始,不断将现有候选数与每个质因数相乘(只保留小于 `2^32` 的乘积),处理具有重数的唯一质因数,最后选择最大的候选数 `m` 作为小于 `2^32` 的最大因数,计算相应的余数 `n / m`,并判断是否能将该数拆分为两个 32 位因数。一般来说,答案(如果存在)不是唯一的,这种方法返回的是其中一个值最大的因数对。还给出了用 Python 实现的代码示例。

有趣的是,如果随机选择一个 64 位整数,它通常无法表示为两个 32 位整数的乘积。

作者信息

Daniel Lemire 是魁北克大学(TELUQ)的计算机科学教授。

文章评论情况

关于“所有 64 位整数中,只有 17% 是两个 32 位整数的乘积”有 3 条评论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 15:30:04

blibili视频怎么下载全场景合规操作与本地高清保存完整方案

在日常使用B站的过程中,很多用户都会遇到需要离线保存视频的场景,比如通勤无网观看、学习素材留存、本地随时回放等。2026年B站平台对视频缓存、导出规则有着明确的规范,不同下载方式的权限、画质、文件格式差异极大。本文作为系统性实操指南…

作者头像 李华
网站建设 2026/6/2 15:26:16

FPGA学习第一步:手把手教你用Quartus II 13.0 + Cyclone器件库搭建本地开发环境(含离线安装器件包方法)

FPGA开发环境搭建实战:从Quartus II安装到器件库配置全指南 在数字电路设计领域,FPGA开发环境的搭建往往是初学者面临的第一个挑战。不同于普通软件的安装,FPGA工具链的配置涉及主程序、器件库、许可证等多个组件的协同工作。本文将带你从零开…

作者头像 李华
网站建设 2026/6/2 15:26:10

5步掌握游戏模组注入:Mod Engine 2彻底改变你的魂系游戏体验

5步掌握游戏模组注入:Mod Engine 2彻底改变你的魂系游戏体验 【免费下载链接】ModEngine2 Runtime injection library for modding Souls games. WIP 项目地址: https://gitcode.com/gh_mirrors/mo/ModEngine2 还在为游戏模组安装的复杂流程而烦恼吗&#xf…

作者头像 李华