藍橋杯—試題 算法提高 質因數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;
}