• 【noi 2.2_1751】分解因数(递归)


    题意:问一个给定正整数的分解因数的方式数。N=a1*a2*...*ak(a1<=a2<=...<=ak)。

    解法:一步步分解该数,总方式数为一个个因数被分解的方案数之和。

    可用大括号表示,也可想象成一棵树[分层构造],每个节点为不同的因数分解方式。(结构图凑合着看吧.....)

    N=
      X={u*v, u={...}
      *    w*r, w={...}
      Y    ...a种方案数
           }

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<cmath>
     5 
     6 int mmax(int x,int y) {return x>y?x:y;}
     7 
     8 int f(int x,int y)
     9 {
    10     int s=1;//self
    11     for (int i=mmax(2,y);i*i<=x;i++)//保证从小到大
    12       if (x%i==0) s+=f(x/i,i);
    13     return s;
    14 }
    15 
    16 int main()
    17 {
    18     int T;
    19     scanf("%d",&T);
    20     while (T--)
    21     {
    22       int x;
    23       scanf("%d",&x);
    24       printf("%d
    ",f(x,0));
    25     }
    26 }
  • 相关阅读:
    欧拉图
    hdu2544 迪杰斯特拉题目优化
    迪杰斯特拉--数组模拟邻接表优化
    快速幂
    四叉树 bnuoj
    逆康拓展开展开
    全排列 STL
    魔板拼图
    「luogu4366」最短路
    「国家集训队」稳定婚姻
  • 原文地址:https://www.cnblogs.com/konjak/p/6016535.html
Copyright © 2020-2023  润新知