2017-05-07 62 views
0

我正在嘗試編寫一個程序,該程序使用堆棧以降序的順序打印正整數的素數因子。使用堆棧的素因子分解

但是,我不確定我在做什麼是正確的。

這是我到目前爲止的代碼。目前,我已經完成了素因分解,但Stack部分讓我沮喪。

import java.util.Stack; // Initialize Stacks 

public class PrimeFactorization { 

    public static void printPrimeNumbers(int prime) { 
     Stack<Integer> stack = new Stack<Integer>(); //create stack 
     int n = 0; 

     for (int i = 0; i < n; i++) { //intialize for loop to check each letter 
      stack.push(n); 
     } 

     while (!stack.isEmpty()) { 
      n += stack.pop(); 
     } 

     for (int i=0; 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("*"); 
        } 
       } 
      } 
     } 
    } 

    public static void main(String[] args) { 
     printPrimeNumbers(1) 
    } 
} 
+0

@partycoder堆棧將在這裏工作,因爲我們的目標是打印主要因素按降序排列.... –

回答

0

首先,找到所有2分割輸入,並將它們添加到stack

其次,找到所有大於2的素數,如果它們分開輸入,則將它們添加到stack。第三,作爲最後一步,檢查輸入本身是否是大於2的素數。如果是這樣,請打印它,因爲步驟2不會添加該數字。

public static void printPrimeNumbers(int n) { 
    Stack<Integer> stack = new Stack<Integer>(); //create stack 

    //First Step 
    while (n % 2 == 0) { 
     stack.add(2); 
     n = n/2; 
    } 

    //Second Step 
    for (int i = 3; i <= Math.sqrt(n); i += 2) { 
     while (n % i == 0) { 
      stack.add(i); 
      n = n/i; 
     } 
    } 

    //Third Step 
    if (n > 2) { 
     System.out.printf("%d ", n); 
    } 
    while (!stack.isEmpty()) { 
     System.out.printf("%d ", stack.pop()); 
    } 
} 
0

你可以做基本找到素數,並將它們添加到堆棧中,然後只是打印,直到有在堆棧中沒有元素:

public static void main(String[] args) { 
    printPrimeFactors(189); // prints 7 3 3 3 
} 

public static void findPrimeNumbers(int n, Stack<Integer> stack) { 

    for (int i = 2; i <= n; i++) { 
     if (n % i == 0) { 
      stack.add(i); 
      n /= i; 
      i--; 
     } 
    } 
} 

public static void printPrimeFactors(int n){ 
    if(n > 1){ 
     Stack<Integer> stack = new Stack<Integer>(); 
     findPrimeNumbers(n, stack); 
     while (!stack.isEmpty()) { 
      System.out.print(stack.pop()+ " ");    
     } 
    } 
}