我正在尝试检查该数字是否为素数(将其除以n以下的所有数字)。这是我的尝试:
bool isPrime(int n, int d){
if (d == 1)
return true;
else{
if (n % d == 0){
return false;
}
else
return (n,d-1);
}
}
n - 检查是否为素数的数字。 当调用函数n-1时,d - 低于n的数字。
请帮我弄清楚我做错了什么。
答案 0 :(得分:14)
您没有递归调用您的函数。 return (n,d-1);
应为return isPrime(n,d-1);
答案 1 :(得分:2)
请不要以这种方式写这个!对于或多或少的正常输入,递归方法将吃掉所有堆栈!只是采用旧的好迭代方式。
当然,蛮力解决方案并不是最快的解决方案。您可以尝试使用Eratosthenes' sieve或其中一些more advanced tests。
答案 2 :(得分:2)
如果它是素数,你只需要包括检查1的条件。
bool isPrime(int n, int d)
{
if(n<2)
return 0;
if(d == 1)
return true;
else
{
if(n % d == 0)
return false;
else
return isPrime(n, d - 1);
}
}
答案 3 :(得分:0)
public class Test {
private static final ConcurrentLinkedQueue<A> myAs = new ConcurrentLinkedQueue<>();
private static long timer = System.nanoTime() + 3000000000L; // 3 seconds into the future
public static void main(String... args) {
B myB = new B("thread #1"); // Set in thread 1
new Thread(() -> {
myB.setString("thread #2"); // Set in thread 2
myAs.add(new A(myB));
}).start();
for(long i = 0; i < x; i = System.nanoTime()) {} // Busy-wait for about 3 seconds
System.out.println(myAs.poll().getB().getString()); // Print out value
}
public static class A {
private final B b;
public A(B b) {
this.b = b;
}
public B getB() {
return b;
}
}
public static class B {
private String s = null;
public B(String s) {
this.s = s;
}
public String getString() {
return s;
}
public void setString(String s) {
this.s = s;
}
}
}