本文详解 willans 公式在 python 中的实际应用,分析 `factorial(j-1)` 导致的浮点溢出根本原因,并提供基于模 2π 化简、高精度计算和数学优化的完整解决方案,使公式可稳定计算至第 10 个素数及
以上。
Willans 公式是一类纯数学构造的素数生成公式,其核心思想是利用三角函数(如余弦)的取值特性编码 Wilson 定理:当且仅当 $ j $ 是素数时,$ (j-1)! \equiv -1 \pmod{j} $,即 $ \frac{(j-1)! + 1}{j} $ 为整数,此时 $ \cos\left(\pi \cdot \frac{(j-1)! + 1}{j}\right) = \pm 1 $,其平方为 1;否则结果落在 $ (-1,1) $ 内,平方后小于 1,向下取整为 0。因此内层求和 sum 实际统计了区间 $[1,i]$ 内的素数个数 $ \pi(i) $。
但原始实现存在严重缺陷:当 j 增大(例如 $ j \geq 18 $),factorial(j-1) 迅速突破 $10^{15}$ 量级,而 math.cos() 要求输入为 float——Python float 仅能精确表示约 $2^{53} \approx 9 \times 10^{15}$ 以内的整数,超出后转 float 即丢失精度,且对极大数取模 2π 时,浮点误差被急剧放大,最终触发 OverflowError 或返回无意义值。
✅ 正确解法不是强行用 Decimal 替换 float(math.cos 不支持 Decimal),而是数学化简:利用余弦函数周期性
$$
\cos(\pi x) = \cos\big(\pi \cdot (x \bmod 2)\big)
$$
因为 $ \cos(\theta) = \cos(\theta \bmod 2\pi) $,而此处角度为 $ \pi x $,故只需将 $ x = \frac{(j-1)! + 1}{j} $ 对 2 取模,即计算 $ x \bmod 2 $。注意:$ x $ 是有理数,但 $ (j-1)! + 1 $ 除以 $ j $ 的整数部分不影响模 2 结果——关键在于判断该商是奇数还是偶数(因 $ \cos(k\pi) = (-1)^k $)。
更进一步,由 Wilson 定理:
因此,无需计算超大阶乘!只需判断 $ j $ 是否为素数(用试除法),即可直接得到 floor(cos²(...)) 的值:
def is_prime(x):
if x < 2:
return False
if x == 2:
return True
if x % 2 == 0:
return False
for i in range(3, int(x**0.5) + 1, 2):
if x % i == 0:
return False
return True
def nth_prime(n):
if not isinstance(n, int) or n < 1:
raise ValueError("n must be a positive integer")
# 估算上界:第 n 个素数 < n*(log n + log log n) (n≥6),保守取 2**n 不必要且低效
# 改用动态扩展搜索范围
candidate = 2
count = 0
while count < n:
if is_prime(candidate):
count += 1
if count == n:
return candidate
candidate += 1
return candidate⚠️ 注意事项:
? 总结:面对数学公式的编程实现,优先考虑符号化约简而非数值硬算。Willans 公式的价值在于理论趣味性,工程中请始终选用筛法(如埃氏筛、分段筛)或优化试除。若坚持公式验证,建议用 SymPy 进行符号计算,避免浮点陷阱。
# python
# 编码
# app
# ai
# cos
# overflow
# 三角函数
相关文章:
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
网站制作知乎推荐,想做自己的网站用什么工具比较好?
如何用VPS主机快速搭建个人网站?
如何有效防御Web建站篡改攻击?
如何通过商城自助建站源码实现零基础高效建站?
如何在阿里云虚拟主机上快速搭建个人网站?
建站之星免费模板:自助建站系统与智能响应式一键生成
ui设计制作网站有哪些,手机UI设计网址吗?
建站主机SSH密钥生成步骤及常见问题解答?
安徽网站建设与外贸建站服务专业定制方案
如何快速搭建安全的FTP站点?
建站之星如何通过成品分离优化网站效率?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
大连网站设计制作招聘信息,大连投诉网站有哪些?
建站之星好吗?新手能否轻松上手建站?
制作网站的模板软件,网站怎么建设?
建站之星如何快速更换网站模板?
如何通过cPanel快速搭建网站?
行程制作网站有哪些,第三方机票电子行程单怎么开?
外贸公司网站制作哪家好,maersk船公司官网?
javascript中对象的定义、使用以及对象和原型链操作小结
学校为何禁止电信移动建设网站?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
Swift中swift中的switch 语句
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
Android自定义listview布局实现上拉加载下拉刷新功能
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
婚礼视频制作网站,学习*后期制作的网站有哪些?
如何在阿里云虚拟服务器快速搭建网站?
制作证书网站有哪些,全国城建培训中心证书查询官网?
盘锦网站制作公司,盘锦大洼有多少5G网站?
建站之星代理如何优化在线客服效率?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
网站制作说明怎么写,简述网页设计的流程并说明原因?
山东网站制作公司有哪些,山东大源集团官网?
如何用IIS7快速搭建并优化网站站点?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何在建站主机中优化服务器配置?
如何设置并定期更换建站之星安全管理员密码?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
建站主机选购指南与交易推荐:核心配置解析
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
中山网站制作网页,中山新生登记系统登记流程?
广东企业建站网站优化与SEO营销核心策略指南
*请认真填写需求信息,我们会在24小时内与您取得联系。