使用方法
随机质数生成器在指定区间里用固定种子抽样质数,打开页面时五个输入框已经填好默认示例:数量 5、下限 2、上限 1000、种子 20261108、重复处理为「去重」,结果区直接给出 101、577、499、811、5 与抽样次数、命中率,不必先输入就能看到一组完整结果。
- 填生成数量、下限 lo、上限 hi、随机种子 四个数值框,任意一个按裸 Enter 键(不加 Ctrl、Cmd 或 Shift)即可重算,也可以点「抽样质数」。
- 「重复处理」默认「去重」:随机不等于唯一,抽到重复值会跳过并重试;切成「允许重复」则每次命中都保留,结果里可能出现同一个质数多次。
- 结果区列出抽到的每个质数、是否质数、试除上限 √n,并给出抽样尝试次数与命中率;固定种子保证同一批参数每次都得到同一串结果,便于回放。
- 下方「批量种子」是多行文本框,每行一个种子,按 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 复制,可直接粘进表格软件自动分列。
结果边界与舍入
- 随机 ≠ 唯一。批量生成必须用集合去重重试,并设尝试上限防死循环;窄区间里凑不满数量会明确报错,不会无限循环。
- 素数定理是渐近估计。π(1000) 估计 144.7648、真实 168,误差 −13.8305%,不能当精确计数用。
- 密度随数值增大下降。1~1000 密度 16.8%,900~1000 只有 14 个,所以大范围要提示质数稀疏、可能长时间无结果。
- 本页是抽样工具不是 π(x) 计数器。不能用抽样命中率反推某区间质数个数;168 是逐个判定的背景对照,不是外推结果。
- 固定种子可复现。同一批参数每次得到同一串结果;换种子才会变,便于测试用例回放。
- 非法输入逐条报错。数量、下限、上限、种子留空或越界、下限小于 2、上限不大于下限、区间过窄,分别有具体文案并停止抽样。
- 舍入口径。√n 与命中率显示时保留 4 位小数,内部用完整精度判定;质数本身是整数,不做舍入。
- 纯本地计算。抽样、判定、去重、表格与复制全在浏览器内完成,不发请求、不写 Cookie 或本地存储。
常见问题
为什么抽 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。种子、范围与结果都不会离开你的设备。
相关工具
下面三个站内工具都与「造一批可复现的数值」有关,按需取用,均为已上线的站内页面。