全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Willans 公式实现中的大数溢出问题与高效修正方案

本文解析基于 willans 公式的 python 素数生成器为何在计算第 8 个素数时触发 `overflowerror`,并提供数学原理驱动的数值稳定修正方法,避免阶乘转浮点导致的精度崩溃。

Willans 公式是一类利用三角函数和阶乘构造的“闭式”素数判定公式,其核心思想是:对正整数 $ j $,表达式
$$ \left\lfloor \cos^2\left(\pi \cdot \frac{(j-1)! + 1}{j}\right) \right\rfloor $$
当且仅当 $ j $ 为素数时值为 1(由威尔逊定理保证:$ j $ 是素数 ⇔ $ (j-1)! \equiv -1 \pmod{j} $,即 $ \frac{(j-1)!+1}{j} \in \mathbb{Z} $,故余弦值为 $ \cos(k\pi) = \pm 1 $,平方后为 1);否则该值为 0。因此内层求和 sum 实际统计的是区间 $[1, i]$ 内的素数个数 $ \pi(i) $。

但原始代码存在致命数值缺陷:

  • factorial(j-1) 对 $ j \geq 20 $ 已达 $ 10^{18 }$ 量级,而 math.cos() 要求输入为 float,Python 中 int → float 转换在整数超过 $ 2^{53} $(约 $ 9 \times 10^{15} $)时丢失精度;
  • 更严重的是,factorial(7!) = 5040!(当 j=5041 时出现)是一个拥有上万位的整数,远超 float 表示范围,直接触发 OverflowError。

关键误区在于:我们并不需要精确计算 $ \cos\left(\pi \cdot \frac{(j-1)! + 1}{j}\right) $ 的浮点值,而只需判断其是否等于 $ \pm 1 $ —— 这等价于判断 $ \frac{(j-1)! + 1}{j} $ 是否为整数。因此,应彻底规避浮点运算,改用模运算验证威尔逊条件

def is_prime_wilson(j):
    if j < 2:
        return False
    if j == 2:
        return True
    if j % 2 == 0:
        return False
    # 使用威尔逊定理:j 是素数 ⇔ (j-1)! ≡ -1 (mod j)
    # 但直接算 (j-1)! mod j 仍可能慢;对小 j 可接受,大 j 建议换 Miller-Rabin
    prod = 1
    for k in range(2, j):
        prod = (prod * k) % j
    return prod == j - 1  # 即 (j-1)! ≡ -1 mod j

def nth_prime(n):
    if not isinstance(n, int) or n <= 0:
        raise ValueError("n must be a positive integer")

    count = 0
    candidate = 2
    while count < n:
        if is_prime_wilson(candidate):
            count += 1
            if count == n:
                return candidate
        candidate += 1
    return candidate
✅ 优势:完全整数运算,无浮点溢出风险;逻辑清晰,可验证性高。 ⚠️ 注意:is_prime_wilson 时间复杂度为 $ O(j^2) $,仅适用于教学或极小 $ n $(如 $ n \leq 20 $)。实际应用中应替换为 sympy.isprime() 或 Miller-Rabin 概率素性测试。

若坚持使用 Willans 公式框架(例如用于理论演示),可借助 decimal 模块控制精度,但仍无法解决阶乘过大导致的内存与性能瓶颈。更务实的做法是:承认 Willans 公式在计算数学中具有理论趣味性,但无实用价值——它用高复杂度换取了“公式化”表象,反而掩盖了素数分布的本质计算难度。

总结:OverflowError 根源是误将数论判定问题强行映射到浮点三角函数,违背了数值稳定性原则。正确路径是回归数论本质——用模运算替代浮点余弦,用算法思维替代公式幻觉。


# python  # ai  # 性能瓶颈  # cos  # overflow  # 三角函数 


相关文章: 建站之星如何优化SEO以实现高效排名?  ,怎么在广州志愿者网站注册?  如何通过VPS建站无需域名直接访问?  北京的网站制作公司有哪些,哪个视频网站最好?  免费视频制作网站,更新又快又好的免费电影网站?  如何自定义建站之星网站的导航菜单样式?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  XML的“混合内容”是什么 怎么用DTD或XSD定义  如何在腾讯云服务器上快速搭建个人网站?  PHP正则匹配日期和时间(时间戳转换)的实例代码  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  开心动漫网站制作软件下载,十分开心动画为何停播?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  C++如何使用std::optional?(处理可选值)  建站主机系统SEO优化与智能配置核心关键词操作指南  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  如何在新浪SAE免费搭建个人博客?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  如何在建站之星网店版论坛获取技术支持?  如何零成本快速生成个人自助网站?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  焦点电影公司作品,电影焦点结局是什么?  定制建站策划方案_专业建站与网站建设方案一站式指南  网站制作话术技巧,网站推广做的好怎么话术?  如何选择域名并搭建高效网站?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  在线制作视频网站免费,都有哪些好的动漫网站?  建站为何优先选择香港服务器?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  如何获取免费开源的自助建站系统源码?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  哈尔滨网站建设策划,哈尔滨电工证查询网站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  制作营销网站公司,淘特是干什么用的?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  深圳网站制作培训,深圳哪些招聘网站比较好?  专业商城网站制作公司有哪些,pi商城官网是哪个?  动图在线制作网站有哪些,滑动动图图集怎么做?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  如何制作算命网站,怎么注册算命网站?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  建站之星如何快速更换网站模板?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  如何在阿里云域名上完成建站全流程?  建站VPS配置与SEO优化指南:关键词排名提升策略  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  如何将凡科建站内容保存为本地文件? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。