您现在的位置是:主页 > news > 成都网站定制中心/谷歌推广外贸建站

成都网站定制中心/谷歌推广外贸建站

admin2025/7/5 19:46:17news

简介成都网站定制中心,谷歌推广外贸建站,windows搭建网站开发,网站规划与建设需求分析判断一个数是否是素数,有从简单到复杂多种方法。最高效的算法取决于输入规模(是几个亿以内的数,还是上百位的大整数),我会按实用场景分类讲解: ✅ 常规范围内(比如 ≤ 1e12)判断素数…

成都网站定制中心,谷歌推广外贸建站,windows搭建网站开发,网站规划与建设需求分析判断一个数是否是素数,有从简单到复杂多种方法。最高效的算法取决于输入规模(是几个亿以内的数,还是上百位的大整数),我会按实用场景分类讲解: ✅ 常规范围内(比如 ≤ 1e12)判断素数…

判断一个数是否是素数,有从简单到复杂多种方法。最高效的算法取决于输入规模(是几个亿以内的数,还是上百位的大整数),我会按实用场景分类讲解:


常规范围内(比如 ≤ 1e12)判断素数的最高效方法

使用试除法优化版 + 6k±1 检查法

import mathdef is_prime(n):if n <= 1:return Falseif n <= 3:return Trueif n % 2 == 0 or n % 3 == 0:return False# 只检查 6k±1 的数(跳过能被2或3整除的数)i = 5while i * i <= n:if n % i == 0 or n % (i + 2) == 0:return Falsei += 6return True
  • 时间复杂度:O(√n),比普通的 i += 1 快大约 3 倍以上。
  • 在 64 位整数范围(最多约 1e18)内表现优良。

更高效但更复杂的方法:Miller-Rabin 素性测试(确定性/概率性)

适用于 更大的整数(如 64 位整数、甚至上百位)

✅ Python 中的 Miller-Rabin 判断(64位内确定性版本):

def is_prime_miller_rabin(n):if n < 2:return Falsefor p in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]:if n % p == 0:return n == pd = n - 1r = 0while d % 2 == 0:d //= 2r += 1def try_composite(a):x = pow(a, d, n)if x == 1 or x == n - 1:return Falsefor _ in range(r - 1):x = pow(x, 2, n)if x == n - 1:return Falsereturn True  # compositefor a in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]:if try_composite(a):return Falsereturn True
  • 时间复杂度:O(k * log n),其中 k 是轮数,pow() 是快速幂。
  • 经过这些 a 值验证,对于 n < 2^64 是确定性的

🧠 总结:选择最优算法依据规模

数值范围建议算法是否确定性Python 实现
≤ 10^126k±1 优化试除法✅ 是快速、简单
≤ 2^64Miller-Rabin(特定基底)✅ 是快速、安全
任意大整数Miller-Rabin(多轮)⚠️ 概率性可自定义轮数