使用方法
- 「生成数量」默认 12,允许 1 到 60 的整数;改完数字,或把光标停在框里按回车,立刻重算一批。
- 「随机种子」默认 20261012,可以写任意文字,数字、字母、汉字都合法。种子先按字符码累加折叠成 31 位整数,同一种子必然复现同一批。
- 「类别筛选」默认全部 118 种;锁定某一类后只在该类里抽取,比如卤素只有 6 种、稀有气体只有 7 种,可选池一下子变小。
- 结果区第一行是概要(种子折叠值、数量、类别与池长),随后逐条给出原子序数 Z、符号、中文名、相对原子质量、类别和周期,末行给出本批最重、最轻与互异元素数。
- 明细表默认显示 12 行,点「加载更多」展开全部;「导出 CSV」存成带字节序标记的文件,Excel 直接打开不乱码。
- 「复制结果」复制整段文本;「复制明细表」把当前表格按 TSV 复制,粘进表格软件列位不乱。
- 想复现某一批,只需记下种子、数量、类别三项:同样的三项输入,任何时候打开都得到逐字相同的一批。
- 数量写成小数或超出 1 到 60、种子留空,都会给出针对该项的具体提示,不会拿上一批的结果冒充本次输出。
这个随机化学元素生成器能解决什么问题
第一类是课堂上「不知道抽谁」。化学绪论课让学生轮流说一种元素的性质,口头点人容易集中在前排;用本页按种子抽一批,Z=62 的钐、Z=101 的钔、Z=99 的锿依次出现,每人一个,覆盖面比顺序点名均匀。
第二类是出题与复盘对不上。试卷里写「随机抽三种元素写出电子排布」,学生问是哪三种时,如果工具每次刷新都变,这句话就是空头支票。本页把种子与折叠值写进结果第一行,凭 20261012 这个种子随时重放同一批。
第三类是只想练某一族。讲碱金属时不必从 118 种里捞,把类别锁到「碱金属」,池子只剩 6 种,抽 12 条必然大量重复——这正好拿来演示「独立抽取超过容量会怎样」。
第四类是数据口径不统一。市面上的元素表有的给四位小数、有的给整数、有的把不确定值写进方括号,互相之间对不上。本页 118 条采用同一份常规原子量口径,锝、钋这类没有稳定同位素的元素直接给质量数整数,页面上写明了这一点,复制进课件不会再出现两种写法。
这个工具在本站也叫「随机化学元素生成器」,内置表按 Z 从 1 排到 118,类别字段既是筛选依据也是明细表的一列,下面把折叠、推进、取整三步讲清楚。
计算原理与变量说明
数据表按 Z 连续编号。已确认元素共 118 种,从 Z=1 的氢(H)到 Z=118 的鿫(Og)连续排列,每行五列:Z、符号、中文名、相对原子质量、类别。类别共十类,元素数分别是非金属 7、稀有气体 7、碱金属 6、碱土金属 6、类金属 6、卤素 6、后过渡金属 12、过渡金属 38、镧系 15、锕系 15,合计 118。镧系是 Z=57 到 71 的 15 个元素(镧 La 到镥 Lu),锕系是 Z=89 到 103 的 15 个元素(锕 Ac 到铹 Lr)。118 种元素填满 7 个周期,每周期元素数为 2、8、8、18、18、32、32。
种子先折叠成 31 位整数。累加规则是 s=(s+str.charCodeAt(i))&0x7fffffff,逐字取字符码相加再截到 31 位。默认种子 20261012 八个字符的码值是 50、48、50、54、49、48、49、50,累加得 398,这就是随机流的起点。
每一步推进用线性同余发生器。公式是 s=(Math.imul(s,1103515245)+12345)&0x7fffffff,从 398 推进一次得 1112415663。乘法必须用 Math.imul 而不是普通乘号:398 乘 1103515245 约 4.4×1011,远超双精度浮点能精确表示的 253,普通乘法会丢掉低位,换台浏览器序列就对不上;Math.imul 按 32 位整数乘计算,结果与 C 语言实现一致。
取索引用 floor 映射,不用取余。公式是 Math.floor(s/2147483647*len)%len。分母取 2147483647(即 231−1)而不是 231,保证随机数取到上界时下标也不越界。为什么不能写 s%len:LCG 的低位比特随机性差、周期短,118 是偶数,取余会持续吃到受污染的低位,让相邻元素成对出现;先除以 231−1 再乘池长,用到的是高位比特。
类别筛选只改池长,不改公式。全部 118 种时池长 118;锁到卤素只剩 6 种,同一个 s 映射出的下标完全不同,因为乘的那个 len 变了。所以同一颗种子在「全部」与「卤素」下给出的不是同一批的子集,而是两批独立的结果,结果概要里用「类别(N 种)」把池长标了出来。
几个可以拿来查错的数。单字母符号只有 14 个:B、C、F、H、I、K、N、O、P、S、U、V、W、Y,其余 104 种都是两字母。常温常压(25 °C、1 atm)下呈液态的元素只有 2 个——汞(Hg)与溴(Br);呈气态的有 11 个——氢、氦、氮、氧、氟、氖、氯、氩、氪、氙、氡。地壳质量丰度前两位是氧 46.6%、硅 27.7%;人体质量前四位是氧 65%、碳 18%、氢 10%、氮 3%。
完整示例(数值仅作演示)
默认示例:种子 20261012、数量 12、类别全部。折叠值 398,推进 12 步后逐字如下——第 1 条钐(Sm,Z=62,150.36,镧系)、第 2 条钔(Md,Z=101,258,锕系)、第 3 条锿(Es,Z=99,252,锕系)、第 4 条镎(Np,Z=93,237,锕系)、第 5 条镤(Pa,Z=91,231.04,锕系)、第 6 条锗(Ge,Z=32,72.630,类金属)、第 7 条钠(Na,Z=11,22.990,碱金属)、第 8 条钅仑(Rg,Z=111,272,过渡金属)、第 9 条碳(C,Z=6,12.011,非金属)、第 10 条镭(Ra,Z=88,226,碱土金属)、第 11 条镄(Fm,Z=100,257,锕系)、第 12 条钇(Y,Z=39,88.906,过渡金属)。本批最重是钅仑 272,最轻是碳 12.011,12 条互异。
如果只抽 5 个,得到的是这 12 条的前 5 条:钐、钔、锿、镎、镤。把数量从 12 改成 5,输出与前 5 行逐字相同——每条只消耗一个随机数,第 6 条不会反过来影响前 5 条。
换个种子看差异。种子 liuquan 的前 5 条是硫(S,Z=16)、鿔(Cn,Z=112)、锌(Zn,Z=30)、镆(Mc,Z=115)、碳(C,Z=6),与默认批没有任何共同项。再把类别锁到卤素、种子仍是 20261012,前 5 条是碘(I,Z=53)、鿬(Ts,Z=117)、砹(At,Z=85)、砹、砹——池长从 118 缩到 6,重复立刻显形,这正是独立抽取、不查重的必然表现。
类别与周期分布对照表
下表是十类分类的元素数与 Z 范围,合计 118。类别筛选下拉框的选项与计数即出自此表。
| 类别 | 元素数 | Z 范围 | 首尾元素 |
|---|---|---|---|
| 碱金属 | 6 | 3 ~ 55 | Li → Fr |
| 碱土金属 | 6 | 4 ~ 88 | Be → Ra |
| 过渡金属 | 38 | 21 ~ 112 | Sc → Cn |
| 后过渡金属 | 12 | 13 ~ 116 | Al → Lv |
| 类金属 | 6 | 5 ~ 52 | B → Te |
| 非金属 | 7 | 1 ~ 34 | H → Se |
| 卤素 | 6 | 9 ~ 117 | F → Ts |
| 稀有气体 | 7 | 2 ~ 118 | He → Og |
| 镧系 | 15 | 57 ~ 71 | La → Lu |
| 锕系 | 15 | 89 ~ 103 | Ac → Lr |
| 合计 | 118 | 1 ~ 118 | H → Og |
下表是 7 个周期的元素数,2、8、8、18、18、32、32 合计 118。第 6、7 周期各 32 个,正是因为镧系与锕系各 15 个都塞进了这两行。
| 周期 | 元素数 | Z 范围 |
|---|---|---|
| 1 | 2 | 1 ~ 2 |
| 2 | 8 | 3 ~ 10 |
| 3 | 8 | 11 ~ 18 |
| 4 | 18 | 19 ~ 36 |
| 5 | 18 | 37 ~ 54 |
| 6 | 32 | 55 ~ 86 |
| 7 | 32 | 87 ~ 118 |
结果边界与舍入说明
- 数量留空时提示「生成数量不能为空,请填 1 到 60 之间的整数」;写成 12.5 这类小数时提示必须是整数;小于 1 或大于 60 时提示超出范围,三条提示都点名是「生成数量」这一项。
- 种子留空时提示「随机种子不能为空」;种子可以是任意文字,折叠后恒在 0 到 2147483647 之间,不存在越界,长短只影响折叠值。
- 相对原子质量一列按表中原值显示,不做四舍五入:氦 4.0026 保留四位小数,硫 32.06、铅 207.2 各保留原位数,锝 98、鿫 294 这类没有稳定同位素的元素直接给质量数整数。页面不做二次换算,避免出现 1.0080000001 这类浮点残留。
- 抽取相互独立、不查重:从 118 种里抽 60 条,出现重复是正常结果,末行「互异元素」一栏照实显示,不悄悄去重。
- 类别锁定后池长最小为 6(碱金属、碱土金属、类金属、卤素都是 6 种),此时抽 60 条的重复接近饱和,结果区只负责呈现。
- LCG 是确定性伪随机数,适合抽样与教学演示;涉及密钥、令牌的场景应换用 crypto.getRandomValues,本页不涉密。
- 页面不联网、不写 localStorage,种子与数量只参与本次计算。
常见问题
同一个种子为什么每次生成的结果都一样?换一批要怎么换?
因为用的是确定性伪随机数发生器,状态按(s × 1103515245 + 12345)对 231 取模推进,起点由种子折叠值决定,同一种子必然走出同一条序列。想换一批就改种子:种子 20261012 第一批是钐、钔、锿、镎、镤,换成 liuquan 就是硫、鿔、锌、镆、碳,两批没有共同项。
种子可以写汉字或英文吗?怎么变成数字的?
可以。折叠规则是逐字取字符码累加,再按位与 0x7fffffff 截到 31 位。写「氢」是一个字符,写「liuquan」是八个字符,写「20261012」也是八个字符——长度不同只是折叠值不同,不影响合法性。种子留空才会被拒绝。
为什么乘法必须写 Math.imul,直接写 s * 1103515245 不行吗?
不行。折叠值最大接近 231,乘 1103515245 的结果接近 261,远超双精度浮点能精确表示的 253,普通乘法会丢掉低位并让不同浏览器给出不同序列。Math.imul 做 32 位整数乘,结果与 C 语言实现一致,序列才能跨环境一致。
取下标为什么不用 s % 118 这样更简单的写法?
LCG 的低位比特随机性差,往往按很短的周期循环;118 是偶数,取余只会用到低位,序列会出现成对、成组的规律。本页先除以 2147483647 再乘池长,取到的是高位比特,分布更均匀,这也是站点既定口径。
常温下液态和气态元素各有几个,分别是哪几个?
常温常压(25 °C、1 atm)下液态只有 2 个:汞(Hg)与溴(Br);气态有 11 个:氢、氦、氮、氧、氟、氖、氯、氩、氪、氙、氡。其余元素在该条件下都是固态,个别如镓(熔点 29.76 °C)在手心里就能化,但不属于常温液态。
抽 60 条只有 118 种元素,为什么结果里有重复?
因为每次抽取相互独立、不查重。118 种里抽 60 条,理论互异数的期望约 48.9 种,重复十几次是常态。想看互异数就翻到结果末行;若一批里要求不重复,应改用「无放回抽样」的逻辑,本页不做,因为它会改变序列语义、破坏同种子复现。
相对原子质量一列为什么小数位数不一致?
因为按各元素的常规原子量原值收录:氢 1.008 三位、氦 4.0026 四位、硫 32.06 两位、铅 207.2 一位,锝、钋、砹、氡、钫、镭、锕以后的无稳定同位素元素直接给质量数整数。统一位数反而会引入四舍五入误差,所以本页选择原样呈现。
输入的元素数据会上传吗?工具免费吗?
免费,无需注册。所有数据与计算都在当前浏览器本地完成,页面不联网、不写 localStorage,种子与数量只用于本次计算。