这段代码出了什么问题?质数

时间:2012-05-12 10:41:22

标签: java recursion numbers primes

我知道这不是找到素数的最好也不是最有效的方法;但是,我似乎无法找到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");

1 个答案:

答案 0 :(得分:6)

int替换为boolean以获得更好的表现力,并返回递归调用的值,您的方法如下所示:

public static boolean checkPrime(int num, int i)
{
    if (i == num)
        return true;    
    else
    {
        if (num % i == 0)
            return false;
        else
            return checkPrime(num, i+1);
    }
}

它仍不适用于num < 2,它会一直运行直到i溢出。因此,作为主要的主要检查功能,您可以编写如下内容:

public static boolean checkPrime(int num)
{
   if(num<2)
     return false;
   else
     return checkPrime(num, 2);
}

btw (number % 10) % 2相当于number % 2