【发布时间】:2016-08-15 03:05:03
【问题描述】:
编写一个程序,该程序接受一个整数并打印出所有乘以等于原始数字的较小整数的方法,而无需重复因子集。换句话说,如果您的输出包含 4 * 3,则不应再次打印 3 * 4,因为这将是一个重复集。请注意,这不仅要求质数分解。此外,您可以假设输入整数的大小是合理的;正确性比效率更重要。打印因子(12) 12 * 1 6 * 2 4 * 3 3 * 2 * 2
public void printFactors(int number) {
printFactors("", number, number);
}
public void printFactors(String expression, int dividend, int previous) {
if(expression == "")
System.out.println(previous + " * 1");
for (int factor = dividend - 1; factor >= 2; --factor) {
if (dividend % factor == 0 && factor <= previous) {
int next = dividend / factor;
if (next <= factor)
if (next <= previous)
System.out.println(expression + factor + " * " + next);
printFactors(expression + factor + " * ", next, factor);
}
}
}
我觉得是
如果给定的数是N,并且N的素数个数=d,那么时间复杂度是O(N^d)。这是因为递归深度将上升到素因子的数量。但它并不紧密。有什么建议吗?
【问题讨论】:
-
我认为代码不起作用。例如:
nextnext未定义。 -
@PaulHankin。抱歉,这是一个错字。修复它
-
("
* 1-product" 可以放在不需要控制的单参数方法中。将表达式转换为StringBuilder会妨碍可读性并且没有真正帮助: “每个”字符串被打印。如果factor <= previous,next <= factor暗示next <= previous。出于原则,我会初始化factor = Math.min(dividend/2, previous)。)
标签: algorithm time-complexity number-theory