求一个数的素数因子

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
    }
}

猜你喜欢

转载自blog.csdn.net/u013241673/article/details/79682745
今日推荐