我有一个for循环来计算素数,我如何计算生成的素数?

时间:2016-07-03 09:58:26

标签: java

在这个例子中,我有代码来计算2到130之间的素数。我的任务是增加素数的计数。我不知道怎么回事?

public class Main {

    public static void main(String[] args) {

        for (int i=0; i<130; i++){
            if(isPrime(i)){
                System.out.println(i);
            }
        }
    }

    public static boolean isPrime(int n) {

        if (n == 1) {
            return false;
        }
        for (int i = 2; i <= n / 2; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;

    }
}

2 个答案:

答案 0 :(得分:1)

你只需要添加一个整数变量,在你的for循环中,当你找到素数时,你需要递增,如下所示:

public static void main(String[] args) {
    int numberOfPrimes=0;               // the variable to count the primes
    for (int i=0; i<130; i++){
        if(isPrime(i)){
            System.out.println(i);
            numberOfPrimes++;           //incrementing for each prime found
        }
    }
    System.out.println("number of primes is: " + numberOfPrimes); //showing the number of primes found.
}

public static boolean isPrime(int n) {

    if (n == 1) {
        return false;
    }
    for (int i = 2; i <= n / 2; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;

}

答案 1 :(得分:1)

因为,您想要计算生成的素数。只需声明一个整数类型的变量,比如说计数器并将其值初始化为零。然后,当您在if块中遇到素数时,不是打印它,而是递增计数器的值。检查完所有数字后,打印计数器的值。像这样:

public class Main {

    public static void main(String[] args) {
        int counter = 0;
        for (int i=0; i<130; i++){
            if(isPrime(i)){
                counter++;
            }
        }
        System.out.println(counter);
    }

    public static boolean isPrime(int n) {

        if (n == 1) {
            return false;
        }
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;

    }

}

另外,如果您只是想检查2-130中的数字,那么为什么要从for开始i=0循环。你应该从i=2开始。它将有助于节省一些CPU时间(尽管在这种情况下并不重要)。另外,为了节省更多的CPU时间,您可以搜索数字的素数直到平方根,而不是循环直到潜在素数的一半。