跳到主要内容
CalcMax

因数计算器

范围:1 – 1,000,000

结果

1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60

因数

因数对
1 * 60, 2 * 30, 3 * 20, 4 * 15, 5 * 12, 6 * 10

一个整数的因数,就是另一个能整除它、不留余数的整数。60 的因数是 1、2、3、4、5、6、10、12、15、20、30 与 60——十二个,而它们永远成对出现,每一对相乘都得 60:1 配 60、2 配 30、3 配 20、4 配 15、5 配 12、6 配 10。这一页把两种读法都印出来,摊平的因数表与折起来的因数对,因为它们回答的是不同的问题。要判断一个数是否整除另一个时,你要的是那张表;要找一块面积正好是这个数的矩形,或者要两个乘积固定的数时,你要的是那些对。方法是试除,而真正有用的是知道什么时候可以停。要找全 60 的因数,不必试过 8,因为 8 × 8 已经是 64——过了平方根之后,你找到的每个因数都是某一对里较大的那一半,而较小的那一半早就遇到过了。这就是 60 只要试七次而不是五十九次的原因,也是一个七位数在这一页上依然很快的原因,尽管这一页的上界只有一百万。同一条截断线也是因数对天然有序的原因:每找到一个小因数,它的搭档在同一个时刻产生,所以那些对是按较小的那一半排好的,中间没有排序这一步。动手读输出之前,有两种特殊情形值得先知道。质数恰好只有两个因数——1 与它自己——所以它的因数表很短,因数对只有一项。完全平方数的因数个数是奇数,因为中间那一对是两个相同的数:36 有九个因数,它的因数对收在 6 * 6 上,而这一页只印一次。两者都不是错误,代码里也都不是特例,它们从同一个循环里掉出来。这一页不做的是把数拆成质数。它告诉你有全部因数、全部因数对,也能痛快地告诉你 60 有十二个因数,却从不说 60 = 2² × 3 × 5——因数表里装着那些碎片,但它不是分解。这个区别在数大的时候才要紧:这一页的工作量随输入的平方根增长,而质因数分解是真的难,两者是两个问题。

三个数,因数与因数对并排放在一起

数字因数因数对
121, 2, 3, 4, 6, 121 * 12, 2 * 6, 3 * 4
361, 2, 3, 4, 6, 9, 12, 18, 361 * 36, 2 * 18, 3 * 12, 4 * 9, 6 * 6
601, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 601 * 60, 2 * 30, 3 * 20, 4 * 15, 5 * 12, 6 * 10

横着读一行,中间那列就是右边那列摊开的样子。12 有六个因数、三对;36 有九个因数、五对;60 有十二个因数、六对。要比的是个数。六是偶数,九是奇数,十二是偶数——而 36 是表里唯一的完全平方数,这正是它跟别人不一样的原因。除了平方根以外的每个因数都有搭档可配,于是它们贡献偶数个;平方根只有它自己。另一件值得看的事是:因数多不多并不跟着数大不大走。36 是 12 的三倍,因数多了一半;60 是 12 的五倍,因数翻了一倍。一个数有多少个因数,取决于它的质数碎片怎么组合,与它的大小无关——这也是 720720 远不到一百万、因数却比它附近的任何数都多的原因。

公式

60 ÷ 1 = 60 ⇒ 1 * 60;60 ÷ 2 = 30 ⇒ 2 * 30;60 ÷ 3 = 20 ⇒ 3 * 20;60 ÷ 4 = 15 ⇒ 4 * 15;60 ÷ 5 = 12 ⇒ 5 * 12;60 ÷ 6 = 10 ⇒ 6 * 10;60 ÷ 7 除不尽,8 × 8 > 60,停

n
被分解的那个数——1 到 1000000 之间的整数。1 是收的,它给出唯一的因数 1,这是个正经答案而不是退化情形:1 是自己的因数,而除了它的倍数之外,它不整除别的数
d
试除的除数,按 1、2、3、4 的顺序试。这一页从不试过 n 的平方根,而这条截断线就是全部的窍门:若 d × e = n 而 d 大于平方根,那么 e 一定小于它,也就是 e 早就被找到、那一对早就印出来了
d * d ≤ n
停止规则,写开的样子。对 60 来说最后试的除数是 7,因为 7 × 7 = 49 还在 60 以内,而 8 × 8 = 64 已经出去了。这条规则是「试除次数随输入的平方根增长、而不是随输入增长」的原因——一百万只要试一千次,不是一百万次
n / d
因数的搭档。当 d 整除 n 时,商就是这一对的另一半,而这一页在同一步里把它产出来。这就是 60 的因数对按 1 * 60、2 * 30、3 * 20 的顺序出来、中间没有排序的原因:较小的那一半是按升序被找到的,那些对自然也是
1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60
60 的全部因数,摊平成一行,升序。十二项,是偶数——配对是完整的,每个因数都有搭档。这一行与下面那些对是同一份信息换了个摆法:把那些对读一遍、把数字收起来,就还原成这一行
6 * 6
36 的中间那一对,也是同一个因数在同一行里出现两次的唯一形状。36 是完全平方数,所以它的因数个数是奇数——1、2、3、4、6、9、12、18、36,九个——而这一页把中间那一对印一次而不是两次。这也是完全平方数的因数个数永远不可能是偶数的原因

约分是想要因数表最常见的理由。手算 42/60 的约分时你要找一个能同时整除两者的数,60 的因数告诉你候选有哪些,而 42 的因数告诉你哪几个合格——其中最大的那个就是最大公因数,如果你要的只是它,gcf-calculator 直接回答那个问题。第二种用法是面积固定的矩形:一块 60 平方米的菜地可以是 1 乘 60、2 乘 30、3 乘 20、4 乘 15、5 乘 12 或 6 乘 10,而因数对恰好就是这张可能的形状清单,这也是它们被印成那个形状的原因。同样的问题出现在任何要把东西摆成等行等列的时候:把 60 位客人安排在同样大的桌上,或者把一个班分成人数相同、不剩人的小组。第三种用法是核对一个说法。如果有人说 91 是质数,它的因数表就能了结——1、7、13、91——而那里有四项而不是两项,就是反驳。2、3、5、9 的整除规则能手算掉那些小情形,而这一页从那些规则不再好用的地方接上。当问题其实在于那些碎片而不在于因数本身时,答案在别处:prime-factors-calculator 把数拆成质数,而这一页有意不做这件事;lcm-calculator 与 gcf-calculator 比较两个数而不是描述一个数;simplify-fractions-calculator 拿一个公因数直接把分数约掉,不给你看那张表。

算例

  1. 十二个因数:60

    1. 试 1:60 ÷ 1 = 60 整除,所以 1 与 60 都是因数
    2. 试 2:60 ÷ 2 = 30,所以 2 与 30 是因数;试 3:60 ÷ 3 = 20,得 3 与 20
    3. 试 4:60 ÷ 4 = 15,得 4 与 15;试 5:60 ÷ 5 = 12,得 5 与 12
    4. 试 6:60 ÷ 6 = 10,得 6 与 10;试 7:60 ÷ 7 不是整数
    5. 8 × 8 = 64 已经超过 60,停——十二个因数齐了

    这一页的默认输入,也是挑得好的一个,因为 60 的因数很多——十二个,是比它小的数里最多的。注意这次搜索有多便宜:试了七个除数,不是六十个。因数对那一行与因数表是同样的十二个数,只是被折了一下,让每个数与它相乘的搭档挨在一起。同样值得注意的是因数对收在 6 * 10 上,而不是继续写 10 * 6:一旦某对里较小的那一半越过了平方根,后面剩下的每一对都只是已经印过的那一对换了个顺序。

  2. 完全平方数:36

    1. 1 配 36,接着 2 配 18,接着 3 配 12,接着 4 配 9
    2. 6 × 6 = 36,所以 6 的搭档是它自己——正中间那一个
    3. 7 不整除 36;7 × 7 = 49 早就过去了,而 6 是平方根之前最后一个除数
    4. 因数是 1、2、3、4、6、9、12、18、36——九个,奇数个

    因数个数可以是奇数的那个例子。除了平方根以外,每个因数都有一个彼此不同的搭档,它们两两配掉、一共贡献偶数个;平方根只能跟自己配,贡献一个。这就是 36 有九个因数、而比它大的 60 有十二个、12 有六个的全部原因。因数对那一行把 6 * 6 印了一次而不是两次,这是个选择——印两次会让两行对「一共几个因数」的说法不一致。

  3. 质数:7

    1. 试 1:7 ÷ 1 = 7 整除,所以 1 与 7 是因数
    2. 试 2:7 ÷ 2 不是整数;3 × 3 = 9 已经超过 7,搜索到这儿就停
    3. 1 与 7 之间没有任何数整除它
    4. 两个因数、一对——这就是质数的定义

    这一页上最短的一段非平凡输出,也是「质数不是分解失败」最清楚的例子。质数是恰好有两个因数的数,而那两个永远是 1 与它自己;这一页报告的是这个事实,不是「什么也没找到」。停止规则在这里真的在干活——试完 2 之后就没有什么可试的了,因为 3 × 3 已经比 7 大。再试 3、4、5、6 要花四次除法,而不可能找到任何东西。

局限

输入必须是 1 到 1000000 之间的整数。零是拒绝的:任何整数都整除零,所以它的因数表是无穷的,没有什么可印。负数也拒绝,尽管 ±1、±2 等等都整除 −60——这一页报告的是一个正数的正因数,而带符号的因数表需要一条「两个符号是不是都列」的约定,这一页在任何地方都没有声明它。小数是拒绝而不是四舍五入。一百万这个上界是用来把试除框住的:搜索停在平方根,所以最坏情形是一千次试除,答案清单可能很长但不会长到没法处理。它还是可以很长——720720 有 240 个因数,是一百万以下最多的——而那么大的一张表虽然正确,读起来并不愉快。这一页报告的是因数与因数对,不是质因数,而这个区别很容易被忽略:60 的因数表里有 2、3、5,但这一页从不说 60 = 2² × 3 × 5,而对一个大数来说这两个问题的代价差得很远。2、3、5、9 的整除规则没有被单独标出来——它们只是被吸进了试除里,所以一个以 0 结尾的数的因数表里有 2、5、10,而这一页不会解释为什么。每个因数都按整数印成逗号分隔的一行,因数对用星号表示乘号;不使用千分位分隔符,所以一百万的因数印成 1000000。最后,下面那张参考表是三个固定的数、不跟着你的输入变;回答你输入的是上面那个面板。

常见问题

到底什么算因数?
能整除你的数、不留余数的任何整数。每一对里的两个都算,所以 60 的清单从 1 一直排到 60——1 与它自己永远是因数,有意思的那些在中间。小数不算,即使它除得尽:2.5 装进 60 二十四次,但 2.5 不是整数,所以它不是因数。这一页列的是一个正数的正因数,这是通行的约定。
为什么试到平方根就停了?
因为过了它之后,你能找到的每个因数都是已经见过的某个数的搭档。若 d × e = 60 而 d 大于 60 的平方根,那么 e 一定小于它——也就是 e 早就试过了、那一对也早就印出来了。再往后试只可能把同样的对换个顺序重新发现一次。这就是 60 只要试七个除数而不是六十个的原因,也是这一页的代价随输入的平方根增长的原因:接近一百万的数只要试一千次上下,不是一百万次。
为什么 36 的因数个数是奇数?
因为 36 是完全平方数,它的平方根只能跟自己配对。其他每个因数都有一个不同的搭档——1 配 36、2 配 18、3 配 12、4 配 9——每一对给总数加二。然后 6 × 6 = 36 加一。所以总数是 4 × 2 + 1 = 9。一般地,一个数的因数个数是奇数,当且仅当它是完全平方数,而这是从一张因数表判断它是不是完全平方数最快的办法。
这和质因数分解是一回事吗?
不是,这个区别值得说清楚。这一页给出的是全部因数;质因数分解是把数拆成若干质数相乘。60 的质因数分解是 2² × 3 × 5,而这一页从不印它——尽管 2、3、5 都出现在因数表里,因为质数也是因数,和别的因数一样。实际差别在代价:这一页的工作量与数的平方根成正比,而质因数分解对大数是真的难,公钥密码学整个建立在这个假设上。
能输入 0 或者负数吗?
不能,而这两条都不是随意的限制。任何整数都整除 0,所以它的因数表永远列不完。对负数来说,因数成对带符号出现——1 与 −1、2 与 −2,如此类推——而这一页必须对「两个符号是不是都列」表态,它没有表这个态。输入是 1 到 1000000 之间的整数。小数也一样拒绝而不是四舍五入,因为四舍五入会悄悄地去回答另一个数的问题。
为什么把因数分成两列?
因为它们回答两个不同的问题。摊平的那一列是你要判断某个数是否整除你的数时去查的。因数对是当你的数是你正在挑的两样东西的乘积时你要的——一块面积是这个数的矩形、一组等行等列、一次不剩人的分组。一块 60 平方米的地可以是 1 乘 60、2 乘 30、3 乘 20、4 乘 15、5 乘 12 或 6 乘 10,而这六种形状恰好就是因数对那一列。因数计算器把两列都印出来,因为两列装的是同一批数,只是摆法不同。

参考资料

相关计算器