因此,对于我的作业,我必须编写一个程序,要求用户输入整数,然后打印出该数字的质因数分解。这是我所拥有的:
import java.util.Scanner;
public class PrimeFactor {
public static void main(String[] args) {
System.out.print("Enter a positive number: ");
Scanner scanner = new Scanner (System.in);
int number = scanner.nextInt();
int count;
for (int i = 2; i<=(number); i++) {
count = 0;
while (number % i == 0) {
number /= i;
count++;
if (count == 0) {
continue;
}
}
System.out.println(i+ "**" + count);
}
}
}
我现在遇到的问题是,每当我用数字 15453 运行它时,当我只想要质因数时,我会得到从 1 到 100 的每个因子及其指数的列表,并且我陷入了如何继续。
你快到了!将 if-continue
块移到 for
循环之外。否则,它会“继续”最里面的循环,而不是您想要的循环。
while (number % i == 0) {
number /= i;
count++;
}
if (count == 0) {
continue;
}
System.out.println(i+ "**" + count);
或者,您可以将 System.out.println
调用括在 if (count != 0)
中,因为它是 continue
之后的唯一语句:
while (number % i == 0) {
number /= i;
count++;
}
if (count != 0) {
System.out.println(i+ "**" + count);
}
您在 ideone 上的程序:链接。
public class _03_LargestPrimeFactor {
public static void main(String[] args) {
long a = 600851475143L;
for(int i=2; i<(a/i); i++){ // no factors would exist beyond a/i for a particular i
while( a%i == 0){ // if i is a factor
a = a/i; // divide a by i else we wont get a prime number
System.out.print(a + " x " + i + "\n");
}
}
if(a > 1)
System.out.println("largest prime factor: " + a);
}
}
安慰:
8462696833 x 71
10086647 x 839
约6857 x 1471
最大质因数:6857
首先,你的继续
在 while 循环中,它没有任何效果。最小的解决方法是
public class PrimeFactor {
public static void main(String[] args) {
System.out.print("Enter a positive number: ");
Scanner scanner = new Scanner (System.in);
int number = scanner.nextInt();
int count;
for (int i = 2; i<=(number); i++) {
count = 0;
while (number % i == 0) {
number /= i;
count++;
}
if (count == 0) {
continue;
}
System.out.println(i+ "**" + count);
}
}
}
但是您还有其他一些问题:
if
就足够时,您使用 goto(在这种情况下继续
)更好的代码将是
public class PrimeFactor {
public static void main(String[] args) {
System.out.print("Enter a positive number: ");
Scanner scanner = new Scanner (System.in);
printFactors(scanner.nextInt());
}
public static void printFactors(int product) {
for (int factor = 2; factor <= product; factor++) {
int exponent = 0;
while (product % factor == 0) {
product /= factor;
exponent++;
}
if (exponent > 0) {
System.out.println(factor+ "**" + exponent);
}
}
}
}