2016-10-04 4 views
-2
public boolean checkPrime(int number) 
{ 
    int divisor = 2; 
    int remainder = 1; 
    while(number != divisor) 
    { 
     remainder = number % divisor ; 
     if(remainder == 0) 
     { 
      return false ; 
     } 
     else 
     { 
      divisor ++ ; 
     } 

    } 
    return true ; 
} 


public void primeFactors (int num) 
{ 
    int i = 2 ; 
    while( i <= num) 

    { 

     if(num % i == 0) 
     { 
      boolean isPrime = checkPrime(i); 
      checkPrime(i) ; 
      if(isPrime) 
      { 
       System.out.print("," + i); 
       i++; 
      } 
      else 
      { 
       i++; 
      } 
     } 
     else 
     { 
      i++ ; 
     } 
    } 
} 

}私はAPコンピュータサイエンスクラスの素因数分解のJavaコードを作成しようとしていると私は私が午前

問題は、私はそれのいずれかをjsut以上をプリントアウトするために得ることができないで立ち往生しています各番号。たとえば、16を入力すると、2だけでなく4 2が与えられます。私は、私の教授が私たちを作っているので、チェックプライムを使用しています、私はあなたがそれなしでプログラムを行うことができることを知っています。私はここで新しいですし、私は非常に任意のアドバイスに感謝!

+2

いくつかのアドバイス:[ask]を読んでください。デバッガを使用してください。たくさんの水を飲む。 – Amit

+0

ここにチェック:http://stackoverflow.com/questions/38541142/prime-number-checker-using-javaと素数についての多くの重複。ここでは、sqrt(数値)の代わりにループするような、多くの間違いをしています。見つけたときに因子で割っていません。 –

答えて

0

私が抱えている問題は、各番号のjsut以上を印刷することができないということです。

これは、印刷後のi++;のためです。分裂の可能性がなくなるまで、次の潜在的な約束に進むのではなく、同じものにとどまるべきです。

除数をインクリメントする代わりに、numから除算する必要があります。たとえば、num=242で割り切れるとわかる場合は、2を印刷してnum=12とします。次の反復では2が再び印刷され、num=6となります。次の繰り返しで最後に2が印刷され、num=3になります。これはあなたのアルゴリズムが次の除数に移り、3を印刷するときです。

+0

ありがとう –

関連する問題