If you're seeing this message, it means we're having trouble loading external resources on our website.

如果你被网页过滤器挡住,请确保域名*.kastatic.org*.kasandbox.org 没有被阻止.

主要内容

试除法

定义问题

我们需要制造一个机器,要能回答一个简单的是否问题。给定一个输入 n,n 是否是质数?
让我们想一想这个机器中需要什么才能工作。机器只能根据 一些指令 按顺序进行一定的步骤,这就称为 演算法。为了热身,让我们看看你大脑里的演算法是什么。 回答这个问题:49 是质数吗?
不是?你这是怎样做的?你可能是在 寻找 49 的一个因子,它必须是 大于 1 并小于 49 。如果你没有背熟乘法口诀表,你自然会按照这个顺序做:
  • 49 能被 2 整除吗?     不能
  • 49 能被 3 整除吗?     不能
  • 49 能被 4 整除吗?     不能
  • 49 能被 5 整除吗?     不能
  • 49 能被 6 整除吗?   不能
  • 49 能被 7 整除吗?   
我们找到了 49 的因子 (7),这就 证明了 49 是合数。

建一堵墙

但是,如果我问你 2971215073 是否是质数 呢?
你还在测试吗?在做了几千次测试之后,我还没有找到因子。关键的问题是,什么时候我们才能停止测试并证明 n 是质数? (让我们把这个称为 “墙”)。作为出发点, 我们的墙要等于 n-1 (因为 n 可被 n 整除)。如果我测试到 2971215072 ,我们要么 能找到因子 (这就证明 n 是 合数) ,要么不能 (这就证明 n 是质数)。

建一堵更好的墙

这样会得到答案,但是我们能不能 移动这个墙并节约一些时间? 要记得,我们在寻找 第一个 (或者最小的) 因子。有时候最小的因子会是 2,但是也可能大得多。这就引起关键的问题:最小的因子能有多大?
已知,任何合整数 n 是由两个或多个质数的乘积组成的 n= P * P …
P 最大的时候 就是 n 有 正好两个因子 的时候,因子是 相等的. 这就称为 平方数,例如 9 (9 = 33) 或 49 (49 = 77)。为了面对这个最差的情况,我们只要把墙修在 n 的平方根的地方!
说服你自己: 如果我们在测试到 n 的平方根以后没有找到 n 的因子,n 一定是质数。试着自己证明这个 (此文章下面有一个推导证明)

测试除法算法

到此为止,我们可以继续了。首先让我们用简单的语言总结这个算法:
  • 输入一个整数 n
  • 对在 {2 ... sqrt(n)} 之间的每一个整数 x,测试 n 是否能被 x 整除
  • 如果你找到了因子, n 就是合数,要不然 n 就是质数
如果你有编程经验,你应该打开一个 CS 草稿 并试着让这个函数能工作。否则的话,你可以进行下一步,在那里我提供了一个 成功的运算,以作为你的初始点。 (是 可以 不用任何编程并完成这个课程)。

想加入讨论吗?

尚无帖子。
你会英语吗?单击此处查看更多可汗学院英文版的讨论.