Description
将一个正整数N(1<N<32768)分解质因数,把质因数按从小到大的顺序输出。最后输出质因数的个数。
Input
一行,一个正整数
Output
两行,第一行为用空格分开的质因数
第二行为质因数的个数
Sample Input 1
66
Sample Output 1
2 3 11 3
本题的解题思路:
首先利用埃氏筛法将1~n(n即为输入的正整数)之间的质数筛选出来。
int n;
cin >> n;
for (int i = 2; i * i <= n; i++) {
if (prime[i] == 0) {
for (int j = i * i; j <= n; j += i) {
prime[j] = 1;
}
}
}
接着开始判断n是否能被筛选出来的这些质数整除(2~n从小到大)能整除的质数则压入队列中。
queue<int> T;
for (int i = 2; i <= n; i++) {
if (prime[i] == 0) {
if (n % i == 0) {
while (n % i == 0) {
T.push(i);
n = n / i;
}//对于这段while循环:因为题