计算素数的最后一列

时间:2017-09-29 16:55:14

标签: java loops for-loop while-loop

我使用以下代码获取素数:

public static void printPrimeNumbers(int numberOfPrimes){
    final int NUMBER_OF_PRIMES_PER_LINE = 10;
    int count = 0;
    int number = 2;


    while (count < numberOfPrimes){
        //print the prime numbers and increase count
        if (isPrime(number)){
            count++;

            if (count % NUMBER_OF_PRIMES_PER_LINE == 0){
                System.out.printf("%-5s\n", number);
            }else {
                System.out.printf("%-5s", number);
            }

        }
        number++;
    }

}

private static boolean isPrime(int number) {
    for (int divisor = 2; divisor <= number / 2 ; divisor++) {
        if (number % divisor == 0){ // if true number is not prime
            return false;
        }
    }
    return true;
}

它运行良好,我需要得到最后一列素数的总和,假设我插入printPrimeNumbers(50)将有5行,列中有5个数字我想得到最后一列的总和,如何实现呢?

3 个答案:

答案 0 :(得分:0)

您需要做的是包含一个新变量来保存总和的值。使用该变量,您需要在每列的末尾添加数字的值。确定转到新行的位置将显示何时添加到新的sum变量。我写过你需要添加变量/值的地方,但是将这些值分配给?,你需要用实际代码替换它们才能使它工作。

public static void printPrimeNumbers(int numberOfPrimes){
    final int NUMBER_OF_PRIMES_PER_LINE = 10;
    int count = 0;
    int number = 2;
    int sum = ?; 


    while (count < numberOfPrimes){
        //print the prime numbers and increase count
        if (isPrime(number)){
            count++;

            if (count % NUMBER_OF_PRIMES_PER_LINE == 0){
                System.out.printf("%-5s\n", number);
                sum += ?;
            }else {
                System.out.printf("%-5s", number);
            }

        }
        number++;
    }

}

private static boolean isPrime(int number) {
    for (int divisor = 2; divisor <= number / 2 ; divisor++) {
        if (number % divisor == 0){ // if true number is not prime
            return false;
        }
    }
    return true;
}

答案 1 :(得分:0)

您可以编辑

  

printPrimeNumbers()

方法:

public static void printPrimeNumbers(int numberOfPrimes){
    final int NUMBER_OF_PRIMES_PER_LINE = 10;
    int count = 0;
    int number = 2;
    **List<int> lastColumnPrimes = new ArrayList();**


    while (count < numberOfPrimes){
        //print the prime numbers and increase count
        if (isPrime(number)){
            count++;

            if (count % NUMBER_OF_PRIMES_PER_LINE == 0){
                System.out.printf("%-5s\n", number);
                l**astColumnPrimes.add(number);**
            }else {
                System.out.printf("%-5s", number);
            }

        }
        number++;
    }

    **int lastColumnSum = 0;
    for ( int n : lastColumnPrimes ) {
        lastColumnSum += n;
    }
    System.out.printf("Sum of numbers in last column is " + lastColumnSum);**

}

注意双星号(**)添加的行。很少需要添加,只需要一个列表来跟踪最后一列中的数字,一个循环来获取总和,最后一个print语句来报告总和。中提琴!

如果您不需要跟踪最后一列中的数字,只想要总和,那么您可以省略列表并循环,只需使用int来计算值而不是列表。

答案 2 :(得分:0)

创建一个新变量并将其初始化为0.然后您可以在if语句中添加它以检查新行。然后在最后打印出总数。

int total = 0;


while (count < numberOfPrimes){
    //print the prime numbers and increase count
    if (isPrime(number)){
        count++;

        if (count % NUMBER_OF_PRIMES_PER_LINE == 0){
            System.out.printf("%-5s\n", number);
            total += number;
        }else {
            System.out.printf("%-5s", number);
        }

    }
    number++;
}
System.out.println("Total:" + total);