2012-09-24 76 views
6

私の割り当てのために、ユーザに整数入力を求め、その数値の素因数分解をプリントアウトするプログラムを書く必要があります。 これは私が持っているものです:ときに私私が今持っている問題は、数15453、のように、私はそれを実行するたびにということで、私は1から100までのすべての要素のリストを取得Java数字の素因数分解を表示する

import java.util.Scanner; 

public class PrimeFactor { 
    public static void main(String[] args) { 
     System.out.print("Enter a positive number: "); 
     Scanner scanner = new Scanner (System.in); 
     int number = scanner.nextInt(); 
     int count; 
     for (int i = 2; i<=(number); i++) { 
      count = 0; 
      while (number % i == 0) { 
       number /= i; 
       count++; 
       if (count == 0) { 
        continue; 
       } 
      } 
      System.out.println(i+ "**" + count); 
     } 
    } 
} 

とその指数プライマリファクタだけが欲しいと思っています。私はどのように進むべきかについて悩んでいます。

+0

再帰関数ライブラリクラスを使用できますか?あなたがここで使うことが許されているものを手に入れるだけです。 – thatidiotguy

+3

'continue'ステートメントは非常に頻繁に実行されることはありません... – Keppil

答えて

0

あなたは近いです:

  1. のSystem.out.println文がif(count == 0) { continue; }を削除count>0
  2. ためのループとだけ表示のために、あなたの内側でなければならない、あなただけのcount
をインクリメントするので、それは無用です
4

あなたはほぼそこにいます! ループの外側にあるif-continueブロックを移動します。それ以外の場合は、意図したループではなく最も内側のループを「続行」します。

while (number % i == 0) { 
    number /= i; 
    count++; 
} 
if (count == 0) { 
    continue; 
} 
System.out.println(i+ "**" + count); 

それはcontinue次の文だけだから別の方法として、あなたは、if (count != 0)System.out.println呼び出しを囲むことができます:

while (number % i == 0) { 
    number /= i; 
    count++; 
} 
if (count != 0) { 
    System.out.println(i+ "**" + count); 
} 

ideone上のあなたのプログラム:link

0

whileループからif(count == 0){continue;}文を削除し、それをforループに入れます。 :)

for (int i = 2; i<=(number); i++) { 
     count = 0; 
     while (number % i == 0) { 
      number /= i; 
      count++; 
     } 
     if(count==0) continue; 
     System.out.println(i+ "**" + count); 
    } 
0

なぜ乗算を2回印刷するのか分かりません。クリーンアップコードは次のとおりです。

public static void printPrimeNumbers(int prime) { 

    int n; 

    for (int i = 2; i <= prime; i++) { 
     n = 0; 
     while (prime % i == 0) { 
      prime /= i; 
      n++; 

     } 

     if (n != 0) { 
      for (int j = n; j > 0; j--) { 
       System.out.print(i); 

       if (prime != 1) { 
        System.out.print("*"); 
       } 
      } 
     } 
    } 
} 
0

また、以下の機能から助けを得ることもできます。

public int getPrimeNumber(double number) { 
    int j = 0; 
    while (number % 2 == 0) { 
     number = number/2; 
     j = 2; 
    } 

    for (int i = 3; i <= number; i = i + 2) { 
     while (number % i == 0) { 
      number = number/i; 
      j = i; 
     } 
    } 

    return j == 0 ? 1 : j; 
} 

この関数は、与えられた数の最大素因数を返します。

0

一方、あなたのcontinueはwhileループ内にあり、何の効果もありません。最小限の修正では

public class PrimeFactor { 
    public static void main(String[] args) { 
     System.out.print("Enter a positive number: "); 
     Scanner scanner = new Scanner (System.in); 
     int number = scanner.nextInt(); 
     int count; 
     for (int i = 2; i<=(number); i++) { 
      count = 0; 
      while (number % i == 0) { 
       number /= i; 
       count++; 
      } 
      if (count == 0) { 
       continue; 
      } 
      System.out.println(i+ "**" + count); 
     } 
    } 
} 

だろう。しかし、あなたは他のいくつかの問題を抱えて:

  • あなたのコードを正しくない(皮肉にも、この文脈でそれはに分割されていないことを意味「因数分解」「因数分解」 if
を十分だろうというとき、変数名は不十分
  • を選択している
  • の機能があります(この場合はcontinue)後藤を使用します

    良いコードは次のようになり

    public class PrimeFactor { 
        public static void main(String[] args) { 
         System.out.print("Enter a positive number: "); 
         Scanner scanner = new Scanner (System.in); 
         printFactors(scanner.nextInt()); 
        } 
        public static void printFactors(int product) { 
         for (int factor = 2; factor <= product; factor++) { 
          int exponent = 0; 
          while (product % factor == 0) { 
           product /= factor; 
           exponent++; 
          } 
          if (exponent > 0) { 
           System.out.println(factor+ "**" + exponent); 
          } 
         } 
        } 
    } 
    
  • 1
    public class _03_LargestPrimeFactor { 
    
    public static void main(String[] args) { 
    
        long a = 600851475143L; 
    
        for(int i=2; i<(a/i); i++){       // no factors would exist beyond a/i for a particular i 
    
         while(a%i == 0){        // if i is a factor 
          a = a/i;         // divide a by i else we wont get a prime number 
          System.out.print(a + " x " + i + "\n"); 
         } 
        } 
    
        if(a > 1) 
        System.out.println("largest prime factor: " + a); 
    } 
    
    } 
    

    コンソール:

    8462696833 X 71

    10086647 X 839

    6857 X 1471

    最大素因数:6857

    +0

    詳しく説明してください –

    関連する問題