没有优化的直观暴力

分解因数

http://www.nowcoder.com/questionTerminal/0f6976af36324f8bab1ea61e9e826ef5

解法

1)素数筛
2)用递归写出能分解的最小的素数
能拥递归的前提:预知了递归的层数不会太大
原因:最小素数是2
假设是六位数的数,全是由于2来组成的,也就是我们最大的递归层数
由于2^10=1024
粗略估计,那么2^20约等于1000000
也就是说,最大递归不会超过20层。

AC代码

#include<bits/stdc++.h>
using namespace std;

const int maxn=1000000+5;
bool tag[maxn]={0};

vector<int> aa;

void init()
{
    //0是素数 
    tag[0]=1;
    tag[1]=1;
    tag[2]=0;
    for(int i=2;i<500000+2;++i)
    {

        for(int j=2;i*j<1000000+4;++j)
        {
            tag[i*j]=1;
        }    
    } 

    for(int i=2;i<1000000+4;++i)
    {
        if(0==tag[i])
        {
            aa.push_back(i);
        }
    }
}


queue<int> q;

void rt(int n)
{
    for(int i=0;i<aa.size();++i)
    {
        if(1==n)
        {
            return ;
        }

        if(0==n%aa[i])
        {
            q.push(aa[i]);
            n/=aa[i];

            rt(n);
            return ;
        }
    }
}


int main()
{
    init();

    int n;
    while(~scanf("%d",&n))
    {
        while(!q.empty())
        {
            q.pop();
        }

        rt(n);

        printf("%d =",n);
        int len=q.size();
        for(int i=0;i<len;++i)
        {
            if(i==len-1)
            {
                printf(" %d\n",q.front());
                q.pop();
            }
            else
            {
                printf(" %d *",q.front());
                q.pop();
            }
        }
    }

    return 0;
}
全部评论

相关推荐

02-26 13:56
已编辑
重庆财经学院 Java
King987:你有实习经历,但是写的也太简单了,这肯定是不行的,你主要要包装实习经历这一块,看我的作品,你自己包装一下吧,或者发我,我给你出一期作品
点赞 评论 收藏
分享
03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务