【发布时间】:2017-05-09 03:05:18
【问题描述】:
我需要一个满足以下引用的程序的帮助:
所有整数 >= 2 都可以分解为只有素数的乘积 数字。例如,数字 12 的素数分解为 2*2*3,而数字 100 的素数分解为 2*2*5*5。我们 有兴趣知道输入整数是否有素数 只有 2s 和 3s 的因式分解。
我认为我需要更多的基本条件和全部递归调用。
当前(未完成)代码:
public static boolean hasFactors2and3(int number) throws IllegalArgumentException{
if (number < 2) throw new IllegalArgumentException("Number is less than 2");
if (number >= 2 && number < 5) return true; // because for all these numbers it works
if (number % 2 == 0) return hasFactors2and3(number /= 2);
if (number % 3 == 0) return hasFactors2and3(number /= 3);
}
感谢任何帮助!
【问题讨论】:
-
抱歉,StackOverflow 不是代码编写或家庭作业完成服务。请访问help center 并阅读How to Ask 以了解如何有效地使用本网站
-
这并不是在每种情况下都返回一个值。如果数字通过所有
if语句,它应该返回什么值?你能想出一个数字吗? -
以牺牲一些速度为代价,我建议将数字分解为因子的
List,然后检查List是否有除 2 或 3 之外的任何值。恕我直言,优点是错误检查能力稍好,未来校对能力也更好(即,易于添加新的因子测试以查看是否有 5)。换句话说,在因式分解中更通用一点,分别应用测试逻辑。 -
递归是通过解决同一问题的较小版本来解决问题。在这种情况下,问题的较小版本将出现在
number/2或number/3。这是我认为你应该得到的最大暗示。 -
您的代码看起来不错,但正如您所说,不完整。当你到达它的底部时,你知道
number至少是 5,并且 2 和 3 都没有分成它。你能弄清楚如何处理这样一个数字吗?
标签: java recursion prime-factoring