比较笨的方法:
先用枚举法找到其因子,再递归拆解因子(同样是枚举法),每找到一次因子或成功拆解因子则计数器增加一次。
(注:找到因子后一个数会分成两个因子相乘,要么只拆前者要么只拆后者,否则会有重复计数)
代码如下:
#include <iostream>
using namespace std;
int fun1(int x){ //算法函数
int count = 0;
int i = x;
while( --i >=2){
if(x % i != 0)
continue;
if(x % i ==0){
count += fun1(x/i);
}
}
return (++count);
}
int main(){ //为满足题目格式要求
int sum,x;
FILE *number,*answer;
number = fopen("input.txt","r");
fscanf(number,"%d",&x);
fclose(number);
sum = fun1(x);
answer = fopen("output.txt","w");
fprintf(answer,"%d",sum);
fclose(answer);
cout << "DONE" <<endl;
}
本人还在初学阶段,如有错误,恳请指教。