Java显示数字的Prime Factorization

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

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); 

或者,您可以在if (count != 0)包含System.out.println调用,因为它是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

你很亲近:

  1. System.out.println语句必须位于for循环内,并且只显示count>0
  2. 删除if(count == 0) { continue; } 因为你只增加了count ,所以没用

从while循环中删除if(count == 0){continue;}语句并将其放在for循环中。 🙂

 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); } 

不确定为什么要打印乘法两次! 这是清理过的代码:

 public static void printPrimeNumbers(int prime) { int n; for (int i = 2; i <= prime; i++) { n = 0; while (prime % i == 0) { prime /= i; n++; } if (n != 0) { for (int j = n; j > 0; j--) { System.out.print(i); if (prime != 1) { System.out.print("*"); } } } } } 

首先,你的continue是在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(在这种情况下continue

更好的代码将是

 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); } } } } 

你也可以从下面的function中获得一些帮助。

 public int getPrimeNumber(double number) { int j = 0; while (number % 2 == 0) { number = number / 2; j = 2; } for (int i = 3; i <= number; i = i + 2) { while (number % i == 0) { number = number / i; j = i; } } return j == 0 ? 1 : j; } 

此函数将返回给定数字的最大素数因子。