随机质数生成器

用固定种子和 6k±1 试除在指定区间里抽样质数,默认种子 20261108、范围 2~1000、抽 5 个不重复质数,打开就能看到 101、577、499、811、5 与抽样尝试次数、命中率。这是抽样工具,不是质数计数器。

要抽出的质数个数,默认 5,允许 1 到 50。
抽样区间下界,须 ≥ 2,因为小于 2 不是质数。
抽样区间上界,须大于下限;范围越大质数越稀疏。
固定种子 → 同批结果可复现,便于测试用例回放。
随机不等于唯一,去重用集合记录已抽到的值并重试。
默认已填 3 行示例;按同一区间与数量分别抽样,展示种子如何改变结果。
批量种子(默认 3 行)会在页面打开时由脚本按同一区间逐个抽样,也可按 Ctrl/Cmd + Enter 重新生成。

提示:五个数值框按裸 Enter 触发,批量框按 Ctrl/Cmd + Enter 触发。

质数 / 是否质数 / 试除上限 对照表

序号质数是否质数试除上限 √n

对照表列出前 18 个质数,每行由 isPrime 与 Math.sqrt 现场算出,默认显示前 12 行;导出与复制取自同一份数据。

使用方法

随机质数生成器在指定区间里用固定种子抽样质数,打开页面时五个输入框已经填好默认示例:数量 5、下限 2、上限 1000、种子 20261108、重复处理为「去重」,结果区直接给出 101、577、499、811、5 与抽样次数、命中率,不必先输入就能看到一组完整结果。

  1. 填生成数量、下限 lo、上限 hi、随机种子 四个数值框,任意一个按裸 Enter 键(不加 Ctrl、Cmd 或 Shift)即可重算,也可以点「抽样质数」。
  2. 「重复处理」默认「去重」:随机不等于唯一,抽到重复值会跳过并重试;切成「允许重复」则每次命中都保留,结果里可能出现同一个质数多次。
  3. 结果区列出抽到的每个质数、是否质数、试除上限 √n,并给出抽样尝试次数与命中率;固定种子保证同一批参数每次都得到同一串结果,便于回放。
  4. 下方「批量种子」是多行文本框,每行一个种子,按 Ctrl/Cmd + Enter 用同一区间与数量分别抽样,直观看到种子如何改变输出。

「载入示例」还原全部输入,「复制结果」收进剪贴板。四个数值框都给了 min、max、step 量程:留空、非数字、下限小于 2、上限不大于下限、种子越界、区间过窄,都会弹出点名具体原因的报错,绝不静默归零。结果区与错误区都带 role="alert"。对照表默认 12 行,点「加载更多」展开到 18 行,可导出带 BOM 的 CSV 或按 TSV 复制。

能解决什么

第一个用途是造一组可复现的质数样本。测试用例、教学演示、加密或哈希的示例数据常需要几个「确实是质数」的数,手挑容易挑到合数。本页用 6k±1 试除逐个判定,固定种子又保证同一批参数每次结果一致,别人用同样的种子能复现你看到的 101、577、499、811、5。

第二个用途是把「随机」和「唯一」分开。随机抽样天然可能抽到重复值,批量生成若不去重,5 个结果里可能只有 3 个不同的数。本页默认用集合记录已抽到的值、遇到重复就重试,并设尝试上限防止在窄区间里死循环;允许重复的选项则把这层处理关掉,方便对照两者差别。

第三个用途是用命中率感受质数密度。在 2~1000 里抽 5 个不重复质数平均要试 37 次、命中率 13.5135%,而不是抽 5 次就够。这个数字直观说明质数随数值增大变稀疏;把上限调到很大,页面会提示可能长时间无结果。

还要把定位说清:本页是抽样工具,不是 π(x) 计数器。它不统计某区间一共有多少个质数,也不能用抽样命中率反推质数个数;页面里出现的 π(1000)=168 只是逐个判定的背景对照,不是抽样外推的结果。

原理和变量

随机算法统一用线性同余:s = (Math.imul(s, 1103515245) + 12345) & 0x7fffffff,取数 Math.floor(s / 2147483647 × (hi − lo + 1)) + lo。固定种子 20261108 时,状态序列完全确定,所以同批参数可复现。判质数 isPrime(n) 先排掉小于 2、偶数与 3 的倍数,再从 5 起按 i += 6 试除,每次检查 n % i 与 n % (i + 2),直到 i × i ≤ n。

为什么是 6k±1:除 2 和 3 外,所有质数都落在 6 的邻位上,也就是形如 6k−1 或 6k+1 的数。因为 6k、6k+2、6k+4 是偶数,6k+3 是 3 的倍数,剩下只有 6k±1 可能是质数。于是试除只需检查 i 与 i+2,配合 i 每次加 6,把候选因子数量压到最小;上限取 √n 是因为若 n 有大于 √n 的因子,必然配对一个小于 √n 的因子,检查到 √n 就够。

素数定理 π(x) ≈ x / ln x 是渐近估计,不是精确计数。在 x=1000 处估计值 1000 / ln(1000) = 144.7648,而逐个判定得到的真实计数是 168,相对误差 −13.8305%。1~1000 的质数密度是 16.8%,900~1000 区间只有 14 个,密度随数值增大而下降——这正是「抽 5 个质数要约 37 次」的原因。页面把这些量都现场算出,但绝不用抽样比例去反推总数。

变量含义默认值
s线性同余状态,31 位由种子 20261108 起步
lo / hi抽样区间下界 / 上界2 / 1000
count要抽的质数个数5
tries抽样尝试次数37(默认参数)
hit命中率 = 命中数 / 尝试数13.5135%

整条链路只有整数运算、试除与集合查重,全部在浏览器里执行,不发请求、不写 Cookie 或本地存储。

完整示例

以默认参数走一遍:种子 20261108、lo=2、hi=1000、count=5、去重开启。生成器按线性同余逐个取值,用集合跳过重复,对每个新值跑 6k±1 试除,命中质数的依次是 101、577、499、811、5;凑满 5 个时共尝试 37 次,命中率 5 / 37 = 13.5135%。这串数字与结果区、批量输出第一行完全一致。

每个数都由 isPrime 现场判定,试除上限 √n 分别是 101→10.0499、577→24.0208、499→22.3383、811→28.4781、5→2.2361。例如 811 只需检查到 28.4781,也就是试除 i=5、11、17、23 及其 i+2 邻位即可判定,不必一路除到 810。

把种子改成 1 或 42 再按 Enter,输出会换成另一串质数,但同一串种子每次都稳定复现;把「重复处理」切成「允许重复」,结果里可能出现同一个质数多次。把上限调到 100000,页面会给出「质数稀疏、可能长时间无结果」的边界提示。

批量框默认填了三行种子,按 Ctrl/Cmd + Enter 用同一区间与数量分别抽样,非法行会点名并说明跳过原因。所有结果都由同一套 rng、isPrime 与去重逻辑现场算出,对照表里那些行也是同一 isPrime 的展开,不是手抄答案。

对照表

随机质数生成器的对照表列出前 18 个质数:2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61,默认显示前 12 行,点「加载更多」展开到 18 行。每行给出序号、质数、是否质数,以及试除上限 √n,例如 2→1.4142、37→6.0828、61→7.8102。

前 12 个质数正是 π(100)=25 里最前面的那一段;是否质数一列全部由 isPrime 现场判定为真,√n 由 Math.sqrt 算出保留 4 位。表格与抽样结果用的是同一个判定函数,不存在两套标准。

点「导出对照表 CSV」得到带 BOM 的文件,Excel 打开不乱码;点「复制对照表」按 TSV 复制,可直接粘进表格软件自动分列。

结果边界与舍入

常见问题

为什么抽 5 个质数要试 37 次?

因为 1~1000 的质数密度只有 16.8%,随机取一个数命中的概率不高,还可能抽到重复值被跳过。默认参数下凑满 5 个不重复质数共尝试 37 次、命中率 13.5135%。这正是「随机抽样」与「逐个枚举」的区别。

6k±1 试除是什么原理?

除 2、3 外,质数只能落在 6 的邻位:6k、6k+2、6k+4 是偶数,6k+3 是 3 的倍数,只有 6k±1 可能是质数。所以从 5 起按 i 每次加 6,只需检查 i 与 i+2 两个候选因子,试除到 √n 即可,不必一路除到 n−1。

素数定理能直接告诉我区间里有几个质数吗?

不能。π(x) ≈ x / ln x 是渐近估计:x=1000 时估计 144.7648,真实逐个判定是 168,误差 −13.8305%。本页把它当背景对照,绝不把这条估计当作精确计数,也不用它替代逐个判定。

能用命中率反推质数个数吗?

不能。本页是抽样工具,不是 π(x) 计数器;13.5135% 是这批抽样的命中率,样本量小、受去重与种子影响,不能拿来外推某区间一共有多少质数。页面里的 168 是遍历 2~1000 逐个 isPrime 得到的,与抽样比例无关。

为什么每次结果都一样,随机在哪里?

因为默认用了固定种子 20261108。线性同余的状态由种子唯一决定,所以同一批参数每次都复现同一串结果,方便测试用例回放。把种子框改成别的数,或换用「批量种子」,就会看到不同输出。

去重和允许重复有什么区别?

去重用集合记录所有抽到的值,遇到重复就跳过重试,保证结果里没有相同数字;允许重复则关掉这层处理,命中就保留,5 个结果里可能出现同一个质数多次。随机不等于唯一,做样本时通常选去重。

把上限调到很大会怎样?

质数密度随数值增大下降,大范围里命中会变慢,甚至凑不满指定数量。页面设有尝试上限防止死循环,达到上限仍不足会给出具体报错;同时会提示「质数稀疏、可能长时间无结果」。需要大量大质数请改用专门算法。

抽样会上传或联网吗?

不会。整条链路只有整数运算、试除、集合查重与表格生成,全部在当前浏览器里执行,页面不发起网络请求,也不写 Cookie 或 localStorage。种子、范围与结果都不会离开你的设备。

相关工具

下面三个站内工具都与「造一批可复现的数值」有关,按需取用,均为已上线的站内页面。