(1)参考资料
C++中. 和 -> 的区分_c中->和++-优快云博客
C++——list的简介及使用_c++ list-优快云博客
(2)代码实现
//求该自然数的所有质因子;
#include<bits/stdc++.h>
using namespace std;
bool isZhi(int num)//判断是否是质数;
{
if(num==1)return false;
for(int i=2;i<=sqrt(num);i++)
{
if(num%i==0)return false;
}
return true;
}
class Zhi{//质数信息类;
public:
int num;
int times;
Zhi(int num,int times){
this->num=num;
this->times=times;
}
};
int main()
{
int num1;
cin>>num1;
int temp=num1;//本体
int yin=num1;//因子;
list<Zhi> checkList;//一个链表;
int j=0;//运算次数;
while(temp!=1)//当本体只剩 1 时,退出循环;
{
if(isZhi(yin))//判断该因子是否是质数;
{
if(temp%yin==0)//判断数是否能被该质因子整除;
{
//检测是否重复;
list<Zhi>::iterator it=checkList.begin();
for( ;it!=checkList.end();it++)
{
if(it->num==yin){
//重复质因子;
(*it).times++;
cout<<endl<<"第"<<++j<<"次运算找到重复质因数为:"<<yin<<endl;
break;
}
}
if(it==checkList.end())//如果不重复;
{
Zhi one(yin,1);//定义一个对象并且加入链表;
checkList.push_front(one);
cout<<endl<<"第"<<++j<<"次运算找到一个新质因数为:"<<yin<<endl;
}
temp/=yin;//更新本体,继续寻找 质因子;
yin=temp; //同时更新最大因子为本体;
}
else yin--;//下一个因子;
}
else yin--;//下一个因子;
}
//输出结果;
cout<<endl<<"自然数" <<num1<<"一共有" <<checkList.size()<<"个质因数!"<<endl;
list<Zhi>::iterator it=checkList.begin();
for( ;it!=checkList.end();it++)
{
cout<<endl<<"质因数:"<<it->num<<"出现了"<<it->times<<"次!"<<endl;
}
}
(3) 输入数据
(4)运行结果