版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013241673/article/details/79682745
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
package huawei;
import java.util.Scanner;
/**
*
* @description Question2.java
* @author Administrator
* @date 2018/03/14
* @version
*/
public class Question6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long num = sc.nextLong();
sc.close();
System.out.println(getResult(num));
}
public static String getResult(long num){
StringBuilder sb = new StringBuilder();
// 一个合数n,如果n = p * q 则 p 和 q 一个小于等于n的平方根,一个大于等于n的平方根
//在小于Math.sqrt(num)的数中找不到它的因子,则该数本身应该为质数
//因此循环到Math.sqrt(num)即可
// 如 8 = 2 * 4; 10 = 2 * 5;12 = 3 * 4
for (int i = 2; i <= Math.sqrt(num); i++) {
// i 等于偶数被整除的情况不可能出现
// 也不可能循环到Math.sqrt(num)以上的数
// 循环求i是不是它的质因数,直到i不是它的因数为止(i = 4能被整除的不可能出现,因为当i=2时已经被全求出来了)
// 也就是说number % i==0的情况,只有当i为质数时才有可能出现。
while (true) {
// 如果能整除,就求number/i的质因数
if (num % i == 0) {
sb.append(i);
sb.append(" ");
num /= i;
} else {
break;
}
}
}
if (num != 1) {
sb.append(num);
sb.append(" ");
}
return sb.toString();
}
}