检查数组成员是否为素数时出错

问题描述 投票:0回答:3

我应该扫描一个整数数组,并遍历整个数组,根据整数是否是质数来打印“ Prime”或“ Not prime”。在某些情况下是正确的,而在其他情况下是错误的(例如33)。这是我的代码:

public class Solution {

    public static void main(String[] args) {
        //Declaring the scanner
        Scanner scan = new Scanner(System.in);

        //Getting the number of integers to scan
        int n = scan.nextInt();

        //Declaring a numbers array
        int[] numbers = new int[n];

        //Scanning the integers
        for(int i=0; i<n; i++)
            numbers[i] = scan.nextInt();

        //Determining if numbers are prime
        for(int i=0; i<n; i++)
        {
            boolean isPrime = true;
            for(int j=2; j<n; j++)
            {
                if(numbers[i] % j == 0){
                    isPrime = false;
                    System.out.println("Not prime");
                    break;
                }
            }
            if(isPrime)
                System.out.println("Prime");
        }

    }
}
java algorithm loops conditional-statements primes
3个回答
1
投票

您可以考虑的两个要点:

A。您需要检查直至其平方根的数字,即,如果整数不能被2到其平方根的整数整除,则为质数]]

B。

您不需要额外的boolean标志(即代码中的isPrime)。
import java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        // Declaring the scanner
        Scanner scan = new Scanner(System.in);

        // Getting the number of integers to scan
        System.out.print("How many numbers: ");
        int n = scan.nextInt();

        // Declaring a numbers array
        int[] numbers = new int[n];

        // Scanning the integers
        for (int i = 0; i < n; i++) {
            System.out.print("Enter number " + (i + 1) + ": ");
            numbers[i] = scan.nextInt();
        }

        // Determining if numbers are prime
        for (int i = 0; i < n; i++) {
            int j, upperRange = (int) Math.sqrt(numbers[i]);
            for (j = 2; j <= upperRange; j++)
                if (numbers[i] % j == 0)
                    break;
            if (numbers[i] != 1 && j > upperRange)
                System.out.println(numbers[i] + " is Prime");
            else
                System.out.println(numbers[i] + " is not Prime");
        }

    }
}

示例运行:

How many numbers: 5
Enter number 1: 256
Enter number 2: 289
Enter number 3: 1
Enter number 4: 5
Enter number 5: 7
256 is not Prime
289 is not Prime
1 is not Prime
5 is Prime
7 is Prime

0
投票

合并代码并使用Math.sqrt()将代码重构为此]


0
投票

这是更新的代码

© www.soinside.com 2019 - 2024. All rights reserved.