roufoo的博客

纸上学来终觉浅 绝知此事要躬行

Lintcode 235: Prime Factorization

**当n为质数时,时间复杂度最低: O(sqrt(n)), 但空间复杂度最低: O(1)。
当n为2的幂时,时间复杂度最低: O(logn), 但空间复杂度最高: O(logn)。**
因为当n质因数很多时,需要空间大。当n是2的幂时,质因子最多。比如说1024=2*2*2*2*2*2*2*2*2*2。

代码如下:

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

vector<int> primeFactorization(int n) {
     vector<int> result;
     if (n<=1) return result;
     int sq=sqrt(n);
     for (int i=2; i<=sq; ++i) {
         if (n==1) return result;
         while((n%i==0) && (n>1)) {
            result.push_back(i);
            n=n/i;
         }
     }
     if (n!=1) result.push_back(n);
}

int main()
{
    vector<int> ret1=primeFactorization(10);
    for (auto i : ret1) cout<<i<<" ";
    cout<<endl;

    vector<int> ret2=primeFactorization(660);
    for (auto i : ret2) cout<<i<<" ";
    cout<<endl;

    vector<int> ret3=primeFactorization(1024);
    for (auto i : ret3) cout<<i<<" ";
    cout<<endl;

    return 0;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/roufoo/article/details/80321963
文章标签: Lintcode
个人分类: algorithm-design
想对作者说点什么? 我来说一句

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

不良信息举报

Lintcode 235: Prime Factorization

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭