2016-03-26 15 views
0

ここで私は何をしようとしています。私はあなたの参照のために自分の目標の下に自分のコードを含めました。追加の代数を使ったJava Primeの因子分解

目標:数値nの素因数分解を求める。次に、素因数を1つの数xに連結します。その数xをとり、nで割ります。 x%n = 0の場合、Trueを出力します。 x%n!= 0の場合、falseを出力します。 (つまり、n = 100なら素因数は2,2,5,5、整数は2255になり、次に2255/100を取る、2255%100!= 0、Print False)

私は今プリントしています。 "2 2 5 5"と出力し、すべての素因数を正しく入力します。

可能であれば、理想的には、私が設定した上限を使って数値k = 2に対して実行したいと思います。上界U、そしてk = 2からUまでの任意の値が(上から)真である結果をもたらすならば、そのk値を出力したいと思います。

import acm.program.*; 
import acm.util.*; 
import java.util.Scanner; 
// ------------------------------------------------------------------------- 

public class Factors extends ConsoleProgram 
{ 
    //~ Instance/static variables ............................................. 
    private RandomGenerator rgen = RandomGenerator.getInstance(); 
    //~ Constructor ........................................................... 
    // ---------------------------------------------------------- 
    /** 
    * Creates a new ForLoops object. 
    */ 
    public void run() 
    { 

     int n = 100; 



     println("The prime factorization of " + n + " is: "); 

     // for each potential factor i 

     for (int i = 2; i*i <= n; i++) { 

      // if i is a factor of N, repeatedly divide it out 
      while (n % i == 0) { 

       n = n/i; 
       print(i+" "); 




       //print(i/n); 


      } 



     } 


     // if biggest factor occurs only once, n > 1 
     if (n > 1) println(n); 
     else  println(); 
    } 
} 
+0

あなたの問題は何ですか?あなたはあなたが苦しんでいる本当の問題を述べていません。 – HopefullyHelpful

答えて

0

お持ちの場合は、オーバーアーチforループ既存のコードがそうのようで行く:

int U = 10; //or whatever your limit is 

for (int j = 2; j < U; j++) {  

} 

そして、あなたはあなたがあなたの要因を追加するのStringBuilderを持つことにより、素因数を見つけるためにあなたのアルゴリズムを組み込みます:

あなたの要因を追加するには、このように使用することができ
StringBuilder factors = new StringBuilder(); 

for (int i = 2; i * i <= n; i++) { 

    // if i is a factor of N, repeatedly divide it out 
    while (n % i == 0) { 
     n = n/i; 
     factors.append(Integer.toString(i)); 
     print(i + " "); 
    } 
} 

は、その後、あなたはそのようなあなたのfactors.toStringを解析することができます:

int newNumber = Integer.parseInt(factors.toString); 

(例えば2255のように)あなたの番号を与えることになります。次に、これを単に「この番号は、その後、印刷nはnで割り切れるならば」という場合-なステートメントに入れることができます:

if (newNumber % n == 0){ 
    System.out.println(n);  
} 

少なくとも助けあなたがあなたの方法で取得する必要があります。この。

+0

さて、私はその部分をすべて取り上げました。助けてくれてありがとう!私は今、実際に素因を見つけることに問題があります。私がn = 100にすると、それは私に2,2,5,5を与えてくれます。もし私がn = 123にしても、素因数は3,41ですが、それは私に3を与えるだけです。再度、感謝します! –

+0

ええ、このポストを作成していたときに自分のマシンでコードを実行しましたが、問題の正確な原因がわからないうちに、因数分解が4(2、 2)または9(3,3)。また、私が手伝ってくれたら、私の解決策を受け入れることは、他のユーザーがこの投稿をもっと使いやすくするための良い方法です。ありがとう! –

+0

あなたは、最初にそれを働かせてやってみることができます。それを編集して、それをよりエレガントにするように編集してください。 –

0

スキャナを使用して入力を取り込み、整数として解析できます。その後、単純にwhileループ内で(n)を印刷することができます。

関連する問題