递归检查数字是否为素数

时间:2011-03-27 17:19:09

标签: c++ recursion

我正在尝试检查该数字是否为素数(将其除以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的数字。

请帮我弄清楚我做错了什么。

4 个答案:

答案 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;
        }
    }
}