【问题标题】:Having trouble when counting prime numbers between two integers计算两个整数之间的素数时遇到问题
【发布时间】:2019-05-23 00:30:55
【问题描述】:

我在获取给定整数 A 和整数 B 之间的所有素数时遇到问题。

问题是输出远远超出了我为 B 定义的任何内容。我认为

if (isPrime){
    count++;

会解决这个问题,但输出仍然远远超出预期的整数 B 数。

例如,如果int valueA = 1int valueB = 100,它将在停止前获得大约 1 到 500 的素数,而不是在 100 处结束检查。

感谢您的帮助。

import java.util.*; 

public class PrimeNumbersTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input = new Scanner(System.in); 

        // Ask user to input an integer value for A and B
        System.out.print("Enter the value of A (must be an integer): ");
        int valueA = input.nextInt();

        System.out.print("Enter the value of B (must be an integer): ");
        int valueB = input.nextInt();

        System.out.println("The prime numbers between " + valueA + " and " + valueB + " are:");

        final int LINE = 10;
        int count = valueA;
        int number = 2;

        while (count < valueB) {
        // Assume the number is prime   
        boolean isPrime = true;
        // Test if number is prime
        for (int divisor = 2; divisor <= number / 2; divisor++) {
            if (number % divisor == 0) { // If true number is not prime
                isPrime = false; // Set isPrime to false
                break; // Exit the for loop
            }
        }
         if (isPrime) {
             count++;

            if (count % LINE == 0) {
                System.out.println(number);
            }
            else 
                System.out.print(number + " ");

         }
         number++;
    }      
  }
}

【问题讨论】:

  • 你似乎得到了第一个 B 个素数,而不是 B 之前的素数。仔细考虑 if (isPrime) count++;while (count &lt; valueB) {。我想你想检查number,而不是count
  • 实际上,当我尝试用 while (count
  • 当你想处理一个数字范围时,使用 for 循环来减少混乱。你显然想要for(int number = valueA; number &lt;= valueB; number++){/*check if number is prime*/}

标签: java


【解决方案1】:

当您想处理一个数字范围时,请使用 for 循环而不是 while 循环来减少混淆。你显然想要

for(int number = valueA; number <= valueB; number++){/*check if number is prime*/}

例子:

public static void main(String []args){
    int valueA = 1;
    int valueB = 100;
    int count = 0;
    for(int number = valueA; number <= valueB; number++)
    {
        if(isPrime(number))
        {
            count++;
            System.out.println(number);
        }
    }
    System.out.println("count = " + count);
}

public static boolean isPrime(int n)
{
    for(int i = 2; i*i <= n; i++)
    {
        if(n % i == 0)
        {
            return false;
        }
    }
    return n > 1;
}

对于检查 isPrime inline 的要求:

public static void main(String []args){
    int valueA = 1;
    int valueB = 100;
    int count = 0;
    for(int number = valueA; number <= valueB; number++)
    {
        boolean isPrime = number > 1;
        for(int i = 2; i*i <= number; i++)
        {
            if(number % i == 0)
            {
                isPrime = false;
                break;
            }
        }
        if(isPrime)
        {
            count++;
            System.out.println(number);
        }
    }
    System.out.println("count = " + count);
}

【讨论】:

  • 感谢您的帮助。问题之一是我确实需要 ``` boolean isPrime = true; // 测试数字是否为素数 for (int divisor = 2; divisor
  • @DHazard 只是替换了 isPrime 函数。我已经更新了答案。
  • 我正在尝试从您刚刚所做的事情中学习,但是无论如何它都无法编辑。我必须解决这部分问题。例如,我无法在编辑的 for 循环部分添加 i * i 。我要研究你的代码并试着弄清楚谢谢
  • 我终于搞清楚了!现在我可能会问,我如何最终将每行输出中的 5 个素数结果相加?它一一给我,把它改成 printf 也没有用
  • @DHazard 你可以这样打印:System.out.print(number + ((count % 5) == 0 ? "\n" : " " ));
猜你喜欢
  • 2022-09-24
  • 2021-07-18
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 2013-09-02
相关资源
最近更新 更多