快速求质因子(一定程度上,比辗转相除好得多)

版权声明:有些文章写的很随意,那是仅作为个人记录的文章,建议直接关掉,多看一秒亏一秒 https://blog.csdn.net/qq_36523667/article/details/78546455

借鉴自我的朋友,http://my.csdn.net/raalghul。而他的qq也是需要输入他qq号的质因子才能加他的,所以很有趣,我想他讨教了求质因子的方法,然后加了他,哈哈。


方法:

按正常方法找一个数的因子,用一个for循环,遍历到sqrt(num)前,一个个看能否除的通。

这里有点不一样,找到一个质因子后,num = num/i,减小了num的长度,直接加快了效率。为什么可以这么做,因为比如64,2的6次。如果你这样的话,会直接把64除成1,一次性把2的因子全部消除了。所以这样的目的就是一次性彻底消除一类因子,大大缩小num长度。只需要在循环完后判断num是不是因子即可,因为你执行的没有原来长了,所以num可能会被你漏掉。


代码:

private static List<Integer> getPrimeFactor(int num) {
    List<Integer> primeFactorList = new ArrayList<>();
    for (int i = 2; i * i < num; i++) {
        if (num % i == 0) {
            primeFactorList.add(i);
            while (num % i == 0) num = num / i;
        }
    }
    if (num > 1) primeFactorList.add(num);
    return primeFactorList;
}

接下来可能要用到质因子,所以应用场景先不写了。

展开阅读全文

没有更多推荐了,返回首页