使用堆栈的素数因子分解

时间:2017-05-07 22:19:19

标签: java stack

我正在尝试编写一个程序,该程序使用堆栈以降序打印正整数的素因子。

但是,我不确定我在做什么才是正确的。

这是我到目前为止的代码。目前我完成了素数分解,但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)
    }
}

1 个答案:

答案 0 :(得分: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());
    }
}