質數因子


題目描述

功能:輸入一個正整數,按照從小到大的順序輸出它的所有質數的因子(如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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM