【发布时间】:2012-05-20 17:41:38
【问题描述】:
我知道这不是找到素数的最佳方法,也不是最有效的方法;但是,我似乎找不到 169 算作质数的原因(就我而言,对于较小的数字,它可以正常工作)。
public static int checkPrime(int num, int i)
{
if (i == num)
return 1;
else
{
if (num % i == 0)
return 0;
else
checkPrime(num, i+1);
}
return 1;
}
主类:
System.out.println("Type a number");
number = reader.nextInt();
if ((number % 10) % 2 == 0)
result = 0;
else
result = checkPrime(number, 2);
if (result == 1 || number == 2)
System.out.println(number + " is a prime number");
else
System.out.println(number + " is NOT a prime number");
【问题讨论】:
-
你为什么返回
int,而不是bool? -
您也忽略了递归调用的返回值。
-
如果你检查的是某个数是素数,你为什么还要检查其他数?直接说
if(number % divider == 0) ...。 -
您应该在调试器中运行它以发现它的行为与您的预期不同的地方。
-
另外,我相信您也可以更改为
if (i*i >= num) return 1,因为您不需要检查所有除数以确保它是素数,而只需从 2 到 num 的平方根。见Primality Test。这将在更少的递归周期内解决问题。
标签: java recursion numbers primes