提问者:小点点

Java 显示数的质因数分解


因此,对于我的作业,我必须编写一个程序,要求用户输入整数,然后打印出该数字的质因数分解。这是我所拥有的:

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 的每个因子及其指数的列表,并且我陷入了如何继续。


共3个答案

匿名用户

你快到了!将 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);
            }
        }
    }
}