问题描述
将一个正整数N(1<N<32768)分解质因数,把质因数按从小到大的顺序输出。最后输出质因数的个数。
输入格式
一行,一个正整数
输出格式
两行,第一行为用空格分开的质因数
第二行为质因数的个数
第二行为质因数的个数
样例输入
66
样例输出
2 3 11
3
样例输入
90
样例输出
2 3 3 5
4
4
样例输入
37
样例输出
37
1
1
目前为止,质数,因数的问题,遇到一次错一次。
错误的第一版代码。
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() { 4 int n; 5 cin >> n; 6 int cnt = 0; 7 int t = n; 8 for (int i = 2; i < t; i++) { 9 if (n % i == 0) { 10 cout << i << " "; 11 n /= i; 12 cnt++; 13 } 14 } 15 cout << endl << cnt << endl; 16 return 0; 17 }
输入66的话可以正确输出,但是输入90的话,就会这样
因为在第一版代码中,每一次i都要自增,所以同一个因子只能输出一次。
改为这样就好了,每一次都是从2开始。
AC的第二版代码
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() { 4 int n; 5 cin >> n; 6 int cnt = 0; 7 while (n != 1) { 8 for (int i = 2; i <= n; i++) { 9 if (n % i == 0) { 10 cout << i << " "; 11 cnt++; 12 n = n / i; 13 break; 14 } 15 } 16 } 17 cout << endl << cnt; 18 return 0; 19 }