0

我正在做一个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

4

3 回答 3

5

是数学。

假设您的数字是x,并且您的数字x不是素数。然后必须通过mn这样的mn=x

现在,如果m=n=sqrt(x)我们确实知道mn=x,否则,它们中至少有一个大于x,并且至少有一个小于x 。

较小的必须小于根(否则我们将乘以两个大于根的数字),因此您的算法将首先击中它。

于 2013-05-27T22:58:50.427 回答
2

让我们看一个质数来说明。

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

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

于 2013-05-27T23:34:46.697 回答
0

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

于 2013-05-27T23:01:18.787 回答