【发布时间】:2020-04-16 02:58:10
【问题描述】:
我应该扫描一个整数数组,然后循环遍历它,根据整数是否为素数打印“素数”或“非素数”。 在某些情况下是正确的,而在其他情况下是错误的(例如 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");
}
}
}
【问题讨论】:
-
为什么要循环到
n不是你要检查的整数个数是否是素数吗?你应该循环到numbers[i]/2 -
重构你的代码,你可能会修复这个错误。编写一个方法
boolean isPrime(int number)并在你的方法中调用它。更小、更简单的方法为您所拥有的错误留出的空间要小得多。另外,使用 foreach 循环。再次,减少错误的空间。 -
或
Math.ceil(Math.sqrt(numbers[i])); -
或检查直到
j * j <= n。更好的方法是使用 sieve of eratosthenes 预先计算一定范围内的素数 -
@SiddarthSreeni 我只是想让它工作,我打算除以二来优化我的代码,但后来。
标签: java algorithm loops conditional-statements primes