1

私のコードに何か問題があり、それを理解できません。私の間違いを見つけるのを手伝ってくれませんか?ありがとうございました!

/// Calculate Prime
private static int countPrimes(int number){
    int count =0;
    for(int i=1; i<=MAX_PRIME; i++) {
        if(isPrime(i)){
        count++;
        }
    }
    System.out.println("Exactly "+  count + " prime numbers exist between "+number + " and 1000."); 
return number;
}

これが私の結果です:1から1000の間に正確に180の素数が存在します。これは間違っており、168でなければなりません!!!

4

4 に答える 4

3

暗黙のパラメータであるintnumberがプ​​ログラムで使用されることはないようです。このコードを試してください:

private static int countPrimes(int number){
    int count =0;
    int countPrimes=0;
    if(number<2)
       return 0;
    for(int i=2; i<=number; i++) { //start i=2, because you know that 1 is not a prime number.
       for(int j=1; j<=i; j++){
            if(i%j==0)
                count++;                
        }
        if(count ==2)
            countPrimes++;            
        count=0;
    }
    return number;
}

次に、ランナーメソッドで次を呼び出します。

int numOfPrimes = countPrimes(10000);

この中で、あなたはあなたが数えたい数を変えることができます。この例では、10000までの素数をカウントします。

int numOfPrimes = countPrimes(100);

これにより、最大100の素数がカウントされます。素数を追跡する場合は、プログラムに次を追加できます。

ArrayList<Integer> listOfPrimes = new ArrayList<Integer>();
private static int countPrimes(int number){
    int count =0;
    int countPrimes=0;
    if(number<2)
       return 0;
    for(int i=2; i<=number; i++) { //start i=2, because you know that 1 is not a prime number.
       for(int j=1; j<=i; j++){
            if(i%j==0)
                count++;                
        }
        if(count ==2){
            countPrimes++;
            listOfPrimes.add(i);
        }           
        count=0;
    }
    return number;
}

あなたの番号を取得するために、あなたはこのようなことをすることができます:

System.out.println("Exactly "+  countPrimes(number) + " prime numbers exist between "+ "1" + " and " + number + ".");
System.out.println("These numbers are: ");
for(int i =0; i<listOfPrimes.size();i++){
    System.out.println(listOfPrimes.get(i));
}
于 2012-10-18T02:03:19.283 に答える
1

素数計数は、「エラトステネスのふるい」を使用して見つけることができます。 http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

次のプログラムは番号を数えます。制限を与えられた素数の。

私は制限=1000を取っています。

public class CountPrime {

public static void main(String[] args) {

boolean[] isPrime     = null;
int       Tprimes     = 0;
final int UPPER_BOUND = Integer.parseInt("1000");

/*------------------------------------------------------+
| Assuming all to prime                                 |
+------------------------------------------------------*/
isPrime = new boolean[UPPER_BOUND + 1];
for (int Tindex = 2; Tindex <= UPPER_BOUND; Tindex++) {
  isPrime[Tindex] = true;
} /*end for*/

/*------------------------------------------------------+
| Mark Non-Primes given the Upper Bound                 |
+------------------------------------------------------*/
for (int Tindex = 2; Tindex*Tindex <= UPPER_BOUND; Tindex++) {
  /*------------------------------------------------------+
  | For any prime all the multiples are non-prime         |
  +------------------------------------------------------*/
  if (isPrime[Tindex]) {
    for (int Tver = Tindex; Tindex*Tver <= UPPER_BOUND; Tver++) {
      isPrime[Tindex*Tver] = false;
    } /*end for*/
  } /*end if*/
} /*end for*/

/*------------------------------------------------------+
| Now, as we are done count the total primes            |
+------------------------------------------------------*/
for (int Tindex = 2; Tindex <= UPPER_BOUND; Tindex++) {
  if (isPrime[Tindex]) {
    Tprimes++;
  } /*end if*/
} /*end for*/
System.out.println("Total No. of Primes[" + Tprimes +
                   "], given the limit[" + UPPER_BOUND + "]");
} /*END OF main*/

} /*END OF CountPrime*/

出力:制限[1000]が与えられた場合の素数の総数[168]

于 2012-10-18T06:34:49.710 に答える
0

関数isPrice()は何ですか?整数が素数かどうかをチェックする機能ですか?あなたがそれを持っているなら、あなたはただこのようにする必要があると思います:

 for(int i=1; i<=MAX_PRIME; i++) {
     if(isPrime(i)){
        count++
     }
 }
 return count;
于 2012-10-18T01:45:56.773 に答える
0

の代わりに間違った変数を返すと思います。との間の素数の数を計算する手段countである場合は、次のように、から数える必要があります。countPrimesnunberMaxPrimenumber

for (int i = number; i<=MAX_PRIME;i++)
于 2012-10-18T02:06:37.057 に答える