PrimeFactorization

Prime factorize a given integer.

Example Given 10, return [2, 5].

Given 660, return [2, 2, 3, 5, 11].

Note You should sort the factors in ascending order.

Analysis:

这道题是遍历问题,给出一个num,让它从从最小的factor开始遍历

  • 如果可以整除,则把factor加到list中同时num = num / factor; 下一次继续看能否整除这个factor。
  • 如果不能整除,则factor++。
  • 只要遍历到num = 1,或者factor = sqrt(num)即可跳出循环。此时,如果num!=1,则证明还有一个大于sqrt(num)的prime number存在,此时再向list中加入一个num即可。

这道题在于不用求prime number,因为如果它将从2开始的数都除到不能再除,则每一次它再能整除的数都只能是prime number。

code

public class Solution {
    /**
     * @param num an integer
     * @return an integer array
     */
    public List<Integer> primeFactorization(int num) {
        // Write your code here
        List<Integer> list = new ArrayList<Integer>();
            int fac = 2;
            int number = num;

            while (number != 1 && fac < (int) (1 + Math.sqrt(num))) {
                if (number % fac == 0) {
                    number /= fac;
                    list.add(fac);
                } else {
                    fac++;
                }
            }
        if (number != 1) {
            list.add(number);
            return list;
        }
        return list;
    }
}