将一个正整数N(1<N<32768)分解质因数,把质因数按从小到大的顺序输出。最后输出质因数的个数。
输入格式
一行,一个正整数
输出格式
两行,第一行为用空格分开的质因数
第二行为质因数的个数
第二行为质因数的个数
样例输入
66
样例输出
2 3 113
样例输入
90
样例输出
2 3 3 5
4
4
样例输入
37
样例输出
37
1
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
vector<int> prime;//盛放小于等于n的所有素数
int isprime[32769];//判断小于等于n的所有数是否为素数
int main() {
memset(isprime,-1,sizeof(isprime));//初始化
int n,count=0,k=0;
cin>>n;
for(int i=2;i<=n;i++)//筛法求素数
if(isprime[i]==-1)
for(int j=2;j*i<=n;j++)
isprime[i*j]=0;
for(int i=2;i<=n;i++)//将素数放到prime数组里
if(isprime[i])
prime.push_back(i);
if(isprime[n])//如果n是素数
{
cout<<n;
count++;
}
else//不是素数
{
while(n!=1)//分解质因数
{
while(n%prime[k]==0)
{
cout<<prime[k]<<" ";
n/=prime[k];
count++;
}
k++;
}
}
cout<<endl<<count<<endl;
return 0;
}