参考自:https://blog.csdn.net/cui_yonghua/article/details/93975617
案例:将一个正整数分解质因数。例如:输入 100 : 打印 100 = 2 * 2 * 5 * 5
思路分析:对n进行分解质因数,应先找到一个最小的质数k,可以遵循如下思路:
1. 如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
2. 如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
3. 如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
第一种方法:递归
1 package mytest; 2 3 import java.util.Scanner; 4 5 public class Example { 6 //n代表需要输入的正整数 7 static int n,k = 2; 8 9 public static void main(String[] args) { 10 System.out.print("请输入一个大于2的正整数:"); 11 Scanner scanner = new Scanner(System.in); 12 int n = scanner.nextInt(); 13 System.out.print(n + "="); 14 Example example = new Example(); 15 example.findPrimeFactors(n); 16 17 } 18 public void findPrimeFactors(int n){ 19 while (k <= n){ 20 if(k == n){ 21 System.out.print(n); 22 break; 23 }else if(n>k && n%k == 0){ 24 System.out.print(k + "*"); 25 n = n/k; 26 findPrimeFactors(n); 27 break; 28 }else if (n>k && n%k != 0){ 29 k++; 30 findPrimeFactors(n); 31 break; 32 } 33 } 34 } 35 }
此方法一般情况下是可行的,但是有可能发生内存溢出:
第二种方法:普通循环
package mytest; import java.util.*; /** * 将一个正整数分解质因数。例如:输入 100 : 打印 100 = 2 * 2 * 5 * 5 */ public class Example { public static void main(String[] args) { System.out.print("请输入一个大于2的正整数:"); Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); int a = num; System.out.print("把这个数分解质因数为:num="); ArrayList<Integer> list = new ArrayList<>(); for (int i = 2 ; i <= num ; i ++) { if (num % i == 0) { list.add(i); num = num / i; i = 2; } } for (int i = 0 ; i <= list.size() - 1 ; i ++) { if(i != list.size()-1){ System.out.print(list.get(i) + "*"); }else{ System.out.println(list.get(i)); } } } }
原文:https://www.cnblogs.com/kekeCnblogs/p/13089720.html