质数因子

题目描述

功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如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;
}

原文链接: https://www.cnblogs.com/clwsec/p/11469863.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    质数因子

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/302136

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午11:07
下一篇 2023年2月15日 下午11:08

相关推荐