求某个自然数的所有质因子;

(1)参考资料
C++中. 和 -> 的区分_c中->和++-优快云博客

C++——list的简介及使用_c++ list-优快云博客

C++的几种遍历形式_c++遍历-优快云博客

(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)运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值