我正在尝试编写一个程序,该程序使用堆栈以降序打印正整数的素因子。
但是,我不确定我在做什么才是正确的。
这是我到目前为止的代码。目前我完成了素数分解,但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 :(得分: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());
}
}