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

Error in checking if array members are prime or not

我应该扫描一个整数数组,并循环遍历它,打印 "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");
        }

    }
}

Consolidating the code and using Math.sqrt() Refactor your code to to this

public boolean isPrime(int number){
 if(number==1){
  return false;
 }
 boolean isPrime = true;
 int maxN = Math.ceil(Math.sqrt(number));
 for(int j=2; j< maxN; j++){
  if(number % j == 0){
    isPrime = false;
    break;
  } 
 }
 return isPrime;
}

这是更新后的代码

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++)
    {
        checkPrime(numbers[i]);
    }

}

private static void checkPrime(int number) {
    boolean isPrime = true;
    int limit = (int) Math.ceil(Math.sqrt(number));
    for(int j=2; j<=limit; j++)
    {
        if(number >2 && number % j == 0){
            isPrime = false;
            break;
        }
    }
    if(number> 1 && isPrime)
        System.out.println(number + " is Prime");
    else
         System.out.println(number + " is not prime");

}

}

示例输出

> 5 
> 1 2 3 4 33

1 is not prime
2 is Prime
3 is Prime
4 is not prime
33 is not prime

您可以考虑两个要点:

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