百练 分解因数(递归)

来源:互联网 发布:淘宝卖家怎么改名 编辑:程序博客网 时间:2024/06/05 20:33

E:分解因数

  • 查看
  • 提交
  • 统计
  • 提问
总时间限制: 
1000ms 
内存限制: 
65536kB
描述
给出一个正整数a,要求分解成若干个正整数的乘积,即a = a1 * a2 * a3 * ... * an,并且1 < a1 <= a2 <= a3 <= ... <= an,问这样的分解的种数有多少。注意到a = a也是一种分解。
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a (1 < a < 32768)
输出
n行,每行输出对应一个输入。输出应是一个正整数,指明满足要求的分解的种数
样例输入
2220
样例输出
14
#include<iostream>  #include<cstring>    using namespace std;    int n;  //nn代表当前要分解的数字为nn,m代表要分解的(疑似)最大因子 //返回值代表分解的种数 int dfs(int nn,int m)  {      if(nn==1)return 1;  //若分解的数字为1     if(m==1)return 0;  //若最大因子为1     //如果m确实是nn的因子,那么进行递归调用,并将分解种数相加     if(nn%m==0)return dfs(nn,m-1)+dfs(nn/m,m);      //否则尝试将m-1作为最大因子 return dfs(nn,m-1);  }  int main()  {      int t;cin>>t;      while(t--)      {          cin>>n;          printf("%d\n",dfs(n,n));       }                   return 0;   }   


原创粉丝点击