2011-07-21 6 views
0

要因解決のための解決策がありますか?要因を見つけるために私のJavaコードを議論してください(正しいですか)

+3

これがあなたの宿題であれば、質問に宿題タグを追加する必要があります。 – nfechner

+0

いいえ私は問題を解決するためにそれを使用していますが、それが正しいことを確認します。 – fronthem

+1

いいえ、動作しません:35は素数だと思います。これはあなたの以前の質問とほぼ同じです(http://stackoverflow.com/questions/6773462/which-is-the-best-algorithm-for-find-factors-implements-by-java)。あなたは新しい質問を投稿するのではなく編集しました。 – OpenSauce

答えて

5

いくつかのコメント。まず、@OpenSourceが指摘しているように、このコードは正しく動作しません。あなたはおそらく最上位レベルで素数を忘れることによってあなたのアプローチを単純化するべきです。プライムは別々に扱う必要はありません。

コードの特定の行にいくつかのコメント:この時点で

ArrayList<Integer> list = new ArrayList<Integer>(); 

あなたは二つの要因、1とnがあることを知っています。すぐにリストに追加してみませんか? nは前回から変更されていない場合

if(i > n/2) break; //optimize 

なぜあなたはn/2を再計算していますか?

if(n % i == 0) list.add(new Integer(i)); 

i次いで(n/i)も要因である要因である場合。 n % i == 0を得るたびに、2つの要素が見つかりました。

}else if(n%3 == 0 && n%2 != 0 && n != 3 && n != 1){ //odd number 

これは機能しませんし、それに手間がかかります。あなたは既に偶数を見ましたが、残っているものは奇妙でなければなりません。

}else{ //prime 

いいえ、残っているものはプライムではありません。 1つの素数も同様です。

for(int a:list){ 
    System.out.println(a); 
} 

あなたは印刷する前に、まずlistをソートしたい場合があります。

+0

+1努力しています。一つ目は、 'i == n/i'(同じ要素をリストに2回追加しないでください)のケースに注意してください。 – OpenSauce

関連する問題