将一个正整数N(1<N<32768)分解质因数,把质因数按从小到大的顺序输出。最后输出质因数的个数。
输入格式
一行,一个正整数
输出格式
两行,第一行为用空格分开的质因数
第二行为质因数的个数
样例输入
66
样例输出
2 3 113
样例输入
90
样例输出
2 3 3 5
4
样例输入
37
样例输出
37
1
#include <iostream>
#include <cmath>
#include <vector>
#define MAXN 32768
using namespace std;
struct node{
int x;
int count;
}Node;
vector<node> a;
bool tru(int n)
{
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++)
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
int n,sum=0;
cin>>n;
for(int i=2;i<=n;i++)
{
if(n%i==0&&tru(i))
{
Node.x=i;
Node.count=0;
a.push_back(Node);
}
}
for(int j;;j++)
{
if(n==1)
break;
for(int i=0;i<a.size();i++)
{
if(n%a[i].x==0)
{
n/=a[i].x;
a[i].count++;
}
}
}
for(int i=0;i<a.size();i++)
{
sum+=a[i].count;
for(int j=0;j<a[i].count;j++)
cout<<a[i].x<<" ";
}
cout<<endl;
cout<<sum<<endl;
return 0;
}