蓝桥杯 质因数2 分解质因数

问题描述
将一个正整数N(1<N<32768)分解质因数,把质因数按从小到大的顺序输出。最后输出质因数的个数。
输入格式
  一行,一个正整数
输出格式
  两行,第一行为用空格分开的质因数
  第二行为质因数的个数
样例输入
66
样例输出
2 3 11
3
样例输入
90
样例输出
2 3 3 5
4
样例输入
37
样例输出
37
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 }

猜你喜欢

转载自www.cnblogs.com/fx1998/p/12740638.html