java - 用于素数分解的 Java 程序打印太多
问题描述
我在学校遇到了一个问题要解决,它是这样的:
编写一个程序,读取一个大于 1 的正整数,然后按升序打印出该数的质因数。如果该数字是素数,则打印出该数字,然后是一个声明它是素数的语句,如其中一个示例所示。
所以我写了这个程序,当我输入一个实际的素数时,它有预期的行为。如果我输入 97,输出将是“97 是质数”。正如所料。
但是当我输入 120 时,它会打印“2 2 2 3 5 是一个素数”,其中预期的行为只会打印数字而不是“是一个素数”文本。
检查输入数字是否为素数的方法,如果是,则打印它的因数:
public static void primeFactors(int n) {
while (n % 2 == 0) {
System.out.print(2 + " ");
n = n/2;
}
for (int i = 3; i <= Math.sqrt(n); i = i+2) {
while (n % i == 0) {
System.out.print(i + " ");
n = n/i;
}
}
if (n > 2) {
System.out.print(n + " is a prime number.");
}
}
主要方法:
公共静态无效主要(字符串[]参数){
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
primeFactors(n);
}
所以我想要一些帮助来弄清楚如何使它成为“素数”。仅当输入的数字特别是素数时才打印结尾。
解决方案
我敢肯定,如果你再多玩一点,你会找到答案,但是你去吧:我会写一个方法
public static boolean isPrime(int n)
然后:
if (isPrime(n)) {
System.out.print(bla bla bla...);
} else {
print here factors
}
另一种选择(有点难看)是“记住”如果你发现了一个因素:注意 theboolean foundFactor
及其用法:
public static void primeFactors(int n) {
boolean foundFactor = false;
while (n % 2 == 0) {
foundFactor = true
System.out.print(2 + " ");
n = n/2;
}
for (int i = 3; i <= Math.sqrt(n); i = i+2) {
while (n % i == 0) {
foundFactor = true
System.out.print(i + " ");
n = n/i;
}
}
if (n > 2 && !foundFactor) {
System.out.print(n + " is a prime number.");
}
}
推荐阅读
- azure - 如何在 Azure 服务应用程序上向 docker run 添加其他选项
- python - 已声明但未实例化的类变量
- curl - 如何将缓存添加到 curl/wget?
- java - 相机 X 被另一个 startFocusAndMetering 取消
- c++ - 获得意想不到的价值
- javascript - 显示错误 -- addEventListener 不是函数
- javascript - 反应复选框默认检查映射数组中的第一项
- android - 在 Kotlin 中单击时,我可以缩小然后旋转 ImageButton 吗?
- amazon-web-services - 如何在 Windows 上获取最新版本的 SAM-CLI
- docx - Docx.js 无法识别 html javascript 中的基本功能