检查数组成员是否为质数时出错
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
我应该扫描一个整数数组,并循环遍历它,打印 "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