解法

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;
}