你好,我在这里得到的小程序,检查给定的数字是素数,但我不理解for循环的一些部分,我需要你的帮助。 这是代码:
public class PrimeNumber
{
public static void main(String args[])
{
int number;
boolean prime;
/*
*is a natural number greater than 1 that has no positive divisors other
*than 1 and itself.
* such as: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
* 61, 67, 71, 73, 79, 83, 89, 97, 101, and so on.
*/
number =23;
if(number<2)
prime=false;
else
prime=true;
for(int i=2; i <=number/2; i++)
{
if ((number%i) ==0)
{
prime =false;
break;
}
}
if(prime) System.out.println("It is prime number");
else System.out.println("it is not prime number");
}
}
我理解,首先如果函数检查给定的数字是否高于2,如果不是 素数将是假的,如果它将是真的。 然后在for循环中我认为int是2,因为2是最小的素数? 我理解&lt; =这个操作员检查我是否小于或等于数字,但我不明白为什么我们使用数字/ 2?为什么我们必须检查这两个数字之间是否有休息,如果函数?
答案 0 :(得分:3)
作者最多只检查n/2
,因为如果2
是可能的最小因素,那么n/2
是最大的因子除数(?) 。虽然它不是最大可能的因素,但算法编写者肯定地知道没有因素可能大于n/2
。
然后,作者使用n % i == 0
检查该数字是否可以被该范围内的任何数字整除。如果是,那绝对不是一个主要的。
请记住,这不是最有效的检查方式。见Which is the fastest algorithm to find prime numbers?
答案 1 :(得分:0)
你需要检查number
除了1和它本身之外没有任何除数,
如果您在number/2
之前检查了所有整数,那么显然,您不需要检查更多数字,因为i
number
i>number/2
number/i
for(int i=2; i <=number/2; i++)
for(int i=2; i <=sqrt(number); i++)
{1}}不是除数。
使用相同的逻辑,您可以通过替换此行来提高效率:
{{1}}
这一行:
{{1}}