我应该扫描一个整数数组,并遍历整个数组,根据整数是否是质数来打印“ 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");
}
}
}
您可以考虑的两个要点:
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
合并代码并使用Math.sqrt()将代码重构为此]
这是更新的代码