将一个整数分解为一个或者多个素数的乘积

#include 
#include 
#include 
using namespace std;


vector<int> vec;
vector<int> globalFinal;

void drawPic()
{
    //画图,电子钟形式显示
    int nums[10][5][3]=
    {
        {{1,1,1},{1,0,1},{1,0,1},{1,0,1},{1,1,1}},
        {{0,0,1},{0,0,1},{0,0,1},{0,0,1},{0,0,1}},
        {{1,1,1},{0,0,1},{1,1,1},{1,0,0},{1,1,1}},
        {{1,1,1},{0,0,1},{1,1,1},{0,0,1},{1,1,1}},
        {{1,0,1},{1,0,1},{1,1,1},{0,0,1},{0,0,1}},
        {{1,1,1},{1,0,0},{1,1,1},{0,0,1},{1,1,1}},
        {{1,1,1},{1,0,0},{1,1,1},{1,0,1},{1,1,1}},
        {{1,1,1},{0,0,1},{0,0,1},{0,0,1},{0,0,1}},
        {{1,1,1},{1,0,1},{1,1,1},{1,0,1},{1,1,1}},
        {{1,1,1},{1,0,1},{1,1,1},{0,0,1},{1,1,1}}
    };
    int index,p_count;;
    for(index=0; index<5; ++index)
    {
        int print_num;
        vector<int>::iterator it = globalFinal.begin();
        for (; it!=globalFinal.end(); ++it)
        {
            print_num = *it;
            char num_char[64];
            itoa(print_num,num_char,10);            
            int p_index = 0;
            for(;p_index<strlen(num_char);++p_index){
                for(p_count=0; p_count<3; ++p_count)
                {
                    int print_subNum = num_char[p_index]-'0';
                    if(nums[print_subNum][index][p_count]) cout << "■";
                    else cout << "  ";
                }
                cout<<" ";  
            }

            if(it != globalFinal.end()-1){
                if(2 == index)  cout << " * ";else cout<<"   ";  
            }                 
        }   
        cout << endl;       
    }
}

void MakePrimer(int N)
{
    vec.clear();
    for(int i = 2; i <= N; ++i)
    {
        bool flag = true;
        for(int j = 2; j <= sqrt(i); ++j)
        {
            if(i % j == 0)
            {
                flag = false;
                break;
            }
        }
        if (flag == true)
        {
            vec.push_back(i);
        }
    }
}

bool CanDividedByPrimer(int N)
{
    //查找乘机为N的素数乘机
    int lastFound;
    int t1=N, t2=1;
    bool flag = true;
    for (int i=0; iif (t1 == 0)
        {
            flag = false;
            break;
        }
        if (t2 == 0 && t1 != 1)
        {
            globalFinal.push_back(vec[i]);
            bool retFlag = CanDividedByPrimer(t1);
            if (retFlag == false)
            {
                flag = false;
            }
            break;
        }
        else if(t2==0 && t1==1)
        {
            globalFinal.push_back(vec[i]);
            break;
        }
    }
    return flag;
}

int main()
{
    int N;
    bool res;
    while(cin >> N)
    {
        MakePrimer(N);
        res = CanDividedByPrimer(N);
        if (res)
            drawPic();
        vec.clear();
        globalFinal.clear();
    }
    return 0;
}


你可能感兴趣的:(C++)