使用平方根来帮助确定数字是否为素数

时间:2013-05-27 22:54:31

标签: java math prime-factoring

我正在编写一个java作业,而该作业的一部分是编写一个程序来查找素数。我知道有一条规则,数字的平方根将有助于确定给定的数字是否为素数。我不完全理解这个概念。取37是素数。如果我取37的平方根,则为6.0827。因此,我理解的规则是,我不需要测试并将37除以任何大于平方根的数字,即向下舍入为6.

我的问题是,如果你在6点停止,你怎么知道你的给定数字不能被8整除?在素数与平方根之间的关系中,我的理解是正确的,还是我错过了什么?

37%2 =(2 * 18 = 36)余数1

37%3 =(3 * 12 = 36)余数1

37%4 =(9 * 4 = 36)余数1

37%5 =(7 * 5 = 35)余数2

37%6 =(6 * 6 = 36)余数1

规则说此时停止。 ------------

37%7 =(7 * 5 = 35)余数2

37%8 =(8 * 4 = 32)余数5

37%9 =(9 * 4 = 36)余数1

3 个答案:

答案 0 :(得分:5)

这是数学。​​

假设您的号码为x,而您的号码x不是素数。然后必须mn mn=x

现在,如果m=n=sqrt(x)我们确实知道mn=x,否则,其中至少有一个大于而不是x,并且至少有一个更小< / em>的

较小的一个, 小于根(否则我们将比根数大两倍),所以你的算法会先命中它。

答案 1 :(得分:2)

让我们看一下 non -prime数字来说明。

36 / 1 =    36
36 / 2 =    18
36 / 3 =    12
36 / 4 =     9
36 / 6 =     6

请注意,左边的数字会上升,右边的数字会下降。 (我按顺序编写它们,从最小的因素开始。)当它们相遇(6和6)时,我们处于平方根。我按顺序编写它们,从最小的因素开始。

请记住,因素来自。如果要继续这一点,我会再次重复相同的对:

36 /  9 =    4
36 / 12 =    3
36 / 18 =    2
36 / 36 =    1

因此,通过搜索平方根,我已经找到了所有(成对)因子。

答案 2 :(得分:0)

也许尝试从1开始对整数求平方并检查该平方是否等于可能的素数(让我们称之为n),直到该平方大于n