【发布时间】:2016-03-10 20:38:29
【问题描述】:
首先我知道这是一个简单的问题,我是初学者,所以请多多包涵。 我在 Java 中的这个练习中遇到了问题,我正在练习一个测试,这个真的搞砸了我的自信心。 所以无论如何问题看起来像这样
// Returns true if (and only if) n is a prime number; n > 1 is assumed.
private static boolean isPrime(long n) {
return isPrime(n, 2);
// See the method isPrime below.
}
// Helper method for isPrime ...
private static boolean isPrime(long n, long m) {
return (m * n > (m /* TODO: modify expression if necessary */))
|| (n % m == (0 /* TODO: modify expression if necessary */)
&& isPrime((m /* TODO: modify expression if necessary */), n + 1));
}
因此,您应该将这些表达式填充到 TODO 所在的括号内。 我的问题是我无法追踪它的作用。
isPrime((.....),n+1);
如果有人能就如何开始解决这个问题提供一些建议,我将不胜感激。
【问题讨论】:
-
只有能被 1 和自身整除的数才是素数。对此的补充说明是,如果它可以被任何其他素数整除(即模数返回 0),则它不是素数。应该有助于思考问题。
-
是的,我明白,问题是如果数字是素数并且 n%m == 0 的条件仅对非素数为真,则该方法应该返回 true。因此,如果 n 是一个将是 false 的素数,并且 false && true 仍然是 false ..
-
isPrime((m /* TODO: modify expression if necessary */), n + 1))正在检查除数m的素数,而不是n。如果m不是质数,则n不是质数。 -
如果我们以
n=7为例,当方法第一次调用自身时,m参数是8? -
我明白你在说什么,但我不完全确定答案是什么,因为这是一种奇怪的递归方式。通常你会使用
isPrime(n, m+1)进行递归,但你的问题会转置m和n。