藍橋杯---試題 算法提高 質因數2

藍橋杯—試題 算法提高 質因數2

題目描述:

資源限制
時間限制:1.0s 內存限制:256.0MB
  將一個正整數N(1<N<32768)分解質因數,把質因數按從小到大的順序輸出。最後輸出質因數的個數。
輸入格式
  一行,一個正整數
輸出格式
  兩行,第一行爲用空格分開的質因數
  第二行爲質因數的個數
樣例輸入
66
樣例輸出
2 3 113
樣例輸入
90
樣例輸出
2 3 3 5
4
樣例輸入
37
樣例輸出
37
1

AC代碼:

#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
int ans[100]; 
int isZ(int n)//判斷是否是質數 
{
	int i;
	if(n==1)
		return 0;
	else
	{
		for(i=2;i<=(int)sqrt(n);i++)
		{
			if(n%i==0)
				return 0;//不是質數 
		}
	} 
	return 1;//是質數 
} 
int main()
{
	int n,i,k=0;
	cin>>n;
	while(n>1)
	{
		for(i=2;i<=n;i++)
		{
			if(n%i==0&&isZ(i))//i是質因數 
			{
				ans[k++]=i;
				break;
			}
		}	
		n/=i;
	}	
	for(i=0;i<k;i++)
	{
		if(i==k-1)
		cout<<ans[i]<<endl;
		else
		cout<<ans[i]<<" ";
	}
	cout<<k<<endl;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章