我的问题是我必须计算一个数组中有多少个素数。(在一种方法中)
我尝试这样做
public static int numOfPrime (int[] arr, int primeCount){
primeCount = 0;
boolean isPrime = true;
for(int i = 0; i < arr.length; i++){
for(int d = 2; d <= arr[i]/2; d++){
if(arr[i] % d == 0){
isPrime = false;
if(arr[i] == 2){
isPrime = true;
}
}else{
isPrime = true;
}
if (isPrime == true){
primeCount++;
}
}
}
return primeCount;
}
但它计算出 primeCount 错误,我能做些什么来防止它?
我尝试分两个循环进行计算,一个循环计算 i,另一个循环计算除数。那么如果
arr[i] % d == 0
如果为 true 那么 primcount+++
首先,您不需要将
primeCount
传递给该方法(特别是因为您将其设置为 0
并忽略传入的任何内容)。其次,我不会保留 isPrime
标志。我将从 for-each
循环开始。如果该值是偶数 并且 不是 2
,则它不是素数。然后我们可以从 3
开始迭代,通过 2
测试整除性,增加值的一半。如果它可被整除,则该值不是素数。一旦我们完成这些测试,该值必须是素数。把它们放在一起就可以得到
public static int numOfPrime(int[] arr) {
int primeCount = 0;
vloop: for (int v : arr) {
if (v != 2 && v % 2 == 0) {
continue;
}
for (int i = 3; i <= v / 2; i += 2) {
if (v % i == 0) {
continue vloop;
}
}
primeCount++;
}
return primeCount;
}
然后我测试了它,就像
public static void main(String[] args) {
int[][] arr = { { 1, 2, 3 }, { 4, 6, 8 }, { 1, 2, 3, 5, 7, 11, 13 } };
for (int[] a : arr) {
System.out.println(Arrays.toString(a) + ": " + numOfPrime(a));
}
}
哪个输出(如预期)
[1, 2, 3]: 3
[4, 6, 8]: 0
[1, 2, 3, 5, 7, 11, 13]: 7