Java中的素数方法。大部分都完成了 - 只需要很小的帮助

时间:2013-09-13 18:35:42

标签: java math methods recursion primes

当输入为a时,isPrime方法应返回布尔值true 素数,否则为假。 isPrime方法应该测试num是否为prime 试图将所有整数除以2到num - 1.例如,测试数字是否为7 在宣布7确实是素数之前,它会尝试将7除以2,3,4,5和6。另一方面,为了测试数字9是否为素数,此方法将尝试将9除以2,然后将3除以3,然后再声明9不是素数。

我把这个方法的基本结构放在一起,我必须使用,但是我的问题就在那里。我在那里尝试的任何东西都行不通。怎么可能解决这个问题?

public isPrime(num)
{
    return this.helpPrime(num, 2);
}

private helpPrime(num, divisor)
{
     if (divisor == num)
         return ??;
     if (num % divisor == 0)
         return ??;
     return this.helpPrime(??, ??);
}

3 个答案:

答案 0 :(得分:1)

首先,您的方法需要返回类型。它们也应该是静态的。

其次,您的策略是错误的。你不需要辅助方法,你只需要一个for循环:

public static boolean isPrime(num) {
    long sqrt = (int) Math.sqrt(num);
    for(long divisor = 2; divisor <= sqrt; divisor++) {
            if(num % divisor == 0) {
                    // This only needs to happen once
                    // for this number to NOT be prime
                    return false;
            }
    }
    // If we get here, the number is prime.
    return true;
}

答案 1 :(得分:0)

public boolean isPrime( int num ) {
    return helpPrime( num, 2 );
}

private boolean helpPrime( int num, int divisor ) {
    if( divisor == num )
        return true;
    if( num % divisor == 0 )
        return false;
    return helpPrime( num, divisor + 1 );
}

一个打印素数的简单Java类:

public class Primes {

    public static void main( String[] args ) {

        for( int i = 2; i < 100; i++ ) {
            if( Primes.isPrime( i ) ) {
                System.out.println( i );
            }
        }
    }

    public static boolean isPrime( int num ) {

        return Primes.helpPrime( num, 2 );
    }

    private static boolean helpPrime( int num, int divisor ) {

        if( divisor == num )
            return true;
        if( num % divisor == 0 )
            return false;
        return helpPrime( num, divisor + 1 );
    }
}

答案 2 :(得分:0)

这是解决方案。

public class MathClass {

public static boolean isPrime(int num)
{
    return MathClass.helpPrime(num, 2);
}

private static  boolean helpPrime(int num,int divisor)
{
     if (divisor == num)
         return true;
     if (num % divisor == 0)
         return false;
     return MathClass.helpPrime(num, divisor + 1);
}

}