跳到主内容
UniKit

质数计算器

用确定性 Miller-Rabin 判断质数(覆盖 64 位整数),并给出因数分解、最小质因数、相邻质数、第 n 个质数、区间质数列表与 π(n) 估算。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

整数范围 2 – 18446744073709551615(64 位整数)
质数
最小质因数—
因数分解97
上一个质数89
下一个质数101
π(n) 估算(n / (ln n − 1))27
π(n) 精确值(n ≤ 10⁷)25

素性判定用确定性 Miller-Rabin(前 12 个质数作底座),64 位整数以内结论一定正确

第 n 个质数
第 n 个质数7919
区间内的质数

使用埃拉托斯特尼筛,区间长度上限 100 万,终点上限 10 亿

质数个数21
101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199

这个工具能做什么

  • 判断一个大整数是不是质数:64 位整数范围内用确定性 Miller-Rabin,结论一定正确,不是概率性猜测。
  • 做 RSA、哈希取模或随机数选型时把大整数拆成质因数,Pollard rho 能处理 64 位范围内的半素数。
  • 查相邻质数、第 n 个质数(n 最大 10 万)或某个区间里的全部质数,写算法题时用来对答案。
  • 估算 π(n) 的数量级:既给 n / (ln n − 1) 的估算值,n 不超过一千万时还能给出精确的质数个数。

示例

输入

1000000016000000063

输出

合数 = 1000000007 × 1000000009

这是两个相邻的十位质数之积,用试除 + Pollard rho 分解得到升序质因数列表;因数分解上限是 2^64 − 1。

常见问题

素性判定会不会判错?

不会。用的是前 12 个质数作底座的 Miller-Rabin,这组底座对小于 3.3×10^24 的数给出确定性结论,覆盖全部 64 位整数。超过这个上界会直接拒绝,而不是给一个「大概率是质数」。

为什么输入超过 18446744073709551615 就报错?

因为整个模块按 64 位无符号整数设计:因数分解上限是 2^64 − 1,区间筛右端点上限 10 亿,π(n) 精确值上限一千万。超界会提示超出范围,避免长时间卡住页面。

0、1、负数怎么处理?

0 和 1 既不是质数也不是合数,判定结果为「都不是」;因数分解和最小质因数要求输入 ≥ 1,负数会提示请输入非负整数。

输入里可以带逗号或空格吗?

可以。解析时会去掉下划线、空格和千分位逗号,所以 1_000_000_007 和 1,000,000,007 都能识别,去掉分隔符后不是纯数字才报错。

区间质数为什么限制长度?

区间用分段筛计算,一次要为整个区间分配标记数组。区间长度上限 100 万、终点上限 10 亿,是为了让结果在一两秒内返回,超出会提示区间过长。

关键词:prime质数素数prime checkmiller-rabinfactorization因数分解nth primesieve埃氏筛pi(n)

同类工具