本题不难看出需要使用递归,但是完全把逻辑都写到递归里有一定难度,所以我将程序逻辑分为递归部分和桶排序部分。
递归部分没必要去判断素数,如果是从2开始进行判定,后面的合数不会通过整除判定,而且数字范围比较小,所以没必要进行这个判断。使用递归,将因数数组桶填充完毕。再遍历数组,利用桶排序实现输出效果。为规避最后输出‘’的情况,做一个变量观察是否除完。
#include <bits/stdc++.h>
using namespace std;
int su[105];//桶排序思想做桶
void f(int x,int y){//递归方式进行因数分解
if(x == 1) return ;
if(x % y == 0) {
su[y];
f(x/y,y);
}else{
y;
f(x,y);
}
}
int main(){
int n ;
cin >> n;
f(n,2);
for(int i = 2; i < 105;i++){
if(su[i]> 1 ){
cout << i <<'^'<< su[i];
for(int j = 0 ;j < su[i]; j++){//除n做标记,防止最后的结果多一个‘’。
n /= i;
}
}else if (su[i] == 1){
cout << i;
n /= i;
}else{
continue;
}
if(n != 1){
cout << '*';
}else{
break;
}
}
}