2017-05-07 1 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()+ " ");    
     } 
    } 
}