我正在编写一个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
答案 0 :(得分:5)
这是数学。
假设您的号码为x
,而您的号码x
不是素数。然后必须m
和n
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
?