质数因子

题目描述

功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如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;
}
posted @ 2019-09-05 21:18  煊奕  阅读(4248)  评论(0编辑  收藏  举报