java - 计算两个整数之间的质数时遇到问题

标签 java

我在获取给定整数 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++;
    }      
  }
}

最佳答案

当您想要处理一定范围的数字时,请使用 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 内联的要求:

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);
}

关于java - 计算两个整数之间的质数时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56266622/

相关文章:

java - 如何禁用组件内 ENTER 键的 JDialog 默认按钮处理

java - 如何在Spring-Security中创建条件AuthenticationProvider?

java - 如何从字节中获取枚举

java - Selenium java.lang.nullpointerexception JUnit 测试用例

java - 在 Windows 上设置 JButton 背景颜色

java - 如何让这个 java for 循环在每次迭代之间暂停 1/2 秒?

java - 如何处理并行排序和添加数据的表?

java - 文字字符串方法与对象方法

java - 是否可以用 selenium 模拟键盘行为?

java - JSF/JAVA boolean 切换器(JSF 私有(private),Beans 公共(public)静态)