斐波那契数列
生成器所有处理都在浏览器本地完成,数据不上传服务器
斐波那契数列每一项是前两项之和:0, 1, 1, 2, 3, 5, 8, 13… 下标从 0 起:F(0) = 0、F(1) = 1。 民间有两种起法 ——「F(1) = 1, F(2) = 1」与「F(0) = 0, F(1) = 1」—— 同一个「第 10 项」在两个约定下差一位。这不是小事:拿它做下标计算时差一位就是差一位。这里采用国际通用的 0 起约定(ISO 80000-2),并且每一行都把下标写出来(`F(10)`),一眼能对上是哪一种。 为什么必须用 BigInt。 F(79) 已经接近 2⁵³,F(80) 就超过了 —— 超过之后普通数字会静默丢低位:F(100) 用普通数字算出来是 354224848179262000000,正确值是 354224848179261915075。位数对、开头对,看不出任何异常。而斐波那契恰好是那种「随手算到第 100 项」的数列。 「反查」那一档用来回答另一个方向的问题:这个数在不在数列里?在的话是第几项?
功能
- 四种查法:前 N 项、第 N 项、第 a 到第 b 项、反查某个数在第几项
- 下标从 0 起,且每行都标出下标(`F(10)`),不会与另一种约定混淆
- 起始两项可改(默认 0、1):填 2、1 就是卢卡斯数列(2, 1, 3, 4, 7, 11…)
- 全程 BigInt:第 1000 项的 209 位、第 10000 项都精确
- 反查会告诉你它落在哪两项之间(不是斐波那契数时)
- 反查接受千分位逗号与空格
- 区间写反了(a > b)也能用
- 最多一次列 500 项,超出部分会如实说明还有多少
- 结果逐行可复制
使用方法
- 选查法:前 N 项、第 N 项、区间,还是反查
- 填对应的数值
- 结果实时出现,点某一行的复制按钮取走一项
常见问题
- F(1) 到底是 1 还是 0?
- 取决于你用的约定。这个工具用的是 F(0) = 0、F(1) = 1(国际标准 ISO 80000-2 的写法,也是多数编程教材的写法)。另一种常见约定是 F(1) = F(2) = 1,从 1 开始编号。两者的数列本身一模一样,只是编号错开一位。所以这里每一行都把下标写在标签里(`F(10)`),你对一下就知道自己拿到的 55 是第 10 项还是第 11 项。
- 为什么普通数字会算错?
- 因为 JavaScript 的普通数字是双精度浮点,只有 53 位有效位数:F(80) = 23416728348467685 已经超出,转成普通数字会变成 23416728348467684。更麻烦的是它不报错、不抛异常,只是悄悄少 1。这个工具全程 BigInt,任意位数都精确。
- 能算到第几项?
- 下标上限 10000 项(F(10000) 有 2090 位,是一屏放不下的大数)。限制的原因是输出:再多列下去,结果区与复制的内容都会大到没法用。反查也在这个上限内搜索 —— 超过它的数会明确告诉你「不在数列里」,而不是假装搜完了。
相关工具
质数查询
生成器判定一个数是不是质数、做质因数分解、查第 N 个质数、列出区间内的质数,或随机生成质数。大数用米勒-拉宾判定,快。
随机数生成
生成器生成随机整数或小数:范围、个数、小数位数可调,还能去重、排序、按二/八/十六进制输出。随机源取自浏览器的加密随机数。
进制转换
转换在二、八、十、十六、36、64 进制之间互转,六种结果一次全部给出,19 位的雪花 ID 也能一位不差。全部在浏览器本地完成。
UUID 生成
生成器一次生成一整列 UUID v4、v7、ULID、NanoID 或 MongoDB ObjectId,每行一条,可直接粘进表格或脚本。随机数取自浏览器加密接口,不联网、不记录。
占位文本
生成器生成占位文本,可选拉丁文 Lorem ipsum、英文句子、中文或日文填充句,按段落、句子或单词输出。全部在浏览器本地生成,不联网。
模拟数据
生成器按「字段名:类型」写几行字段,就能得到一整批格式逼真的模拟数据,可导出 JSON、CSV、TSV、SQL、XML、YAML 或 TOML。