数组中有多少个素数? [已关闭]

问题描述 投票:0回答:1

我的问题是我必须计算一个数组中有多少个素数。(在一种方法中)

我尝试这样做

  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+++

java arrays primes
1个回答
0
投票

首先,您不需要将

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
© www.soinside.com 2019 - 2024. All rights reserved.