您的位置:首页 > 编程语言 > C语言/C++

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

2015-09-16 18:58 555 查看
#include <iostream>
#include <vector>
#include <cmath>
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; i<vec.size(); ++i)
{
t1 = N / vec[i];
t2 = N % vec[i];
if (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++ 整数分解