质数因子
题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )最后一个数后面也要有空格。
来源
分析
1.要求的是某个整数的质数因子,也就是整数的因式分解(所有的因子都要分解成质数)如180 = 2*2*3*3*5
。
2.需要知道的是:质数为乘法的最小单元,所有整数都可以表示成 质数的乘积 的形式 具体不做过多介绍。
3.因此,这个就是要求某个整数的因子(所有因子均为质数),然后顺序输出即可。
代码
#include <iostream>
using namespace std;
int main()
{
long n;
while(cin>>n)
{ //n不为1,继续分解
while(n != 1)
{ //每次均从2开始
for(int i = 2; i<= n;i++)
{ //每次获取的i必然为质数
if(n%i == 0)
{
n /= i;
cout<<i<<" ";
break;
}
}
}
}
return 0;
}
改进
上面的算法在n是合数时,并没有多大的问题,但是如果n是质数且比较大,循环次数将会比较多。因此,可以添加判断质数的环节,进行一定程度优化。
#include <iostream>
#include <cmath>
using namespace std;
//判断是否是质数
bool zhishu(long n)
{
bool flag = true;
for(int i = 2; i <= sqrt(n); i++)
{
if(n%i == 0)
{
flag = false;
break;
}
}
return flag;
}
int main()
{
long n;
while(cin>>n)
{
//n不为1,继续分解
while(n != 1)
{
if(zhishu(n))
{
cout<<n<<" ";
break;
}
else
{
//每次均从2开始
for(int i = 2; i <= n; i++)
{ //每次获取的i必然为质数
if(n%i == 0)
{
n /= i;
cout<<i<<" ";
break;
}
}
}
}
}
return 0;
}
感谢阅读,如有问题,请批评指正,谢谢。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步