您的位置:首页 > 其它

【堆栈应用一】一个数divided=几个最小质因数的乘积

2016-03-15 15:33 302 查看
/******************************************堆栈:一个数divided几个质因数(质因数的乘积为N)******************************************/
1 #include<iostream>
#include<stack>
#include<cmath>
using namespace std;
bool Prime(int n);//判断质数
int main()
{
stack<int> st;
stack<int> st2;
int n;
int item=0;
int product=1;
int temp;
cout<<"please input an integer"<<endl;
cin>>n;
temp=n;
for(int i=n;i>2;i--)
{
if(Prime(i)==true)
st.push(i);
}
st.push(2);    //栈顶是最小的质数

while(product!=temp)
{
item=st.top();
while(n%item==0)  //直到不能再整除此质因数就跳转到下一个质因数
{
product*=item;    //记录质因数的积,直到等于n
n/=item;
st2.push(item);
}
st.pop();      //每用完一个质数都弹出,获取下一个质数
}

while(! st2.empty())
{
cout<<st2.top()<<" ";  //逆序输出
st2.pop();
}

return 0;
}
bool Prime(int n)
{//判断n是否是质数
bool isPrime=true;
for(int i=sqrt(n);i>1;i--)
{
isPrime=true;
if(n%i==0)
{//如果有能被整除的,则不是质数
isPrime=false;
}
}
return isPrime;
}


输入2100,输出7 5 5 3 2 2

时间复杂度n+logn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: