math@python双阶乘@累乘的多种实现方式
admin
2024-05-03 19:37:18
0
  • m!!=m(m−2)(m−4)⋯=∏i=0k(m−2i)q=floor[m2]r=(m)%2∈{0,1}k={q,r=1q−1,r=0熟悉计算机的同学,应该能够写出k展开式的简写形式k=q−1+r(r=1或0);从0开始计数m!!=m(m-2)(m-4)\cdots =\prod_{i=0}^{k}(m-2i) \\ q=floor[\frac{m}{2}] \\ r=(m)\%2\in\{0,1\} \\ k=\begin{cases} q,r=1 \\ q-1,r=0 \end{cases} \\熟悉计算机的同学,应该能够写出k展开式的简写形式 \\ k=q-1+r(r=1或0);从0开始计数 m!!=m(m−2)(m−4)⋯=i=0∏k​(m−2i)q=floor[2m​]r=(m)%2∈{0,1}k={q,r=1q−1,r=0​熟悉计算机的同学,应该能够写出k展开式的简写形式k=q−1+r(r=1或0);从0开始计数

    • 上面两个k的展开式具有相同的效果,后者的好处是可以简化代码(不需要判断r的值)

    • 事实上,容易发现序列S=m,m-2,m-4,...是一个等差数列

      • a1=ma_1=ma1​=m

      • d=−2d=-2d=−2

      • ak=a1−2(k−1)a_k=a_1-2(k-1)ak​=a1​−2(k−1)

        • 从1开始计数
      • 根据m的奇偶性,最后一项记为aka_kak​

        • ak=1,m%2=1a_k=1,m\%2=1ak​=1,m%2=1
        • ak=2,m%2=0a_k=2,m\%2=0ak​=2,m%2=0
        • 合起来写,就是ak=21−m%2a_k=2^{1-m\%2}ak​=21−m%2
      • 2(k−1)=a1−akk=a1−ak2+1k1=m−12+1=m+12,m%2=1k2=m−22+1=m2,m%2=0合起来写k=ceil(m2);从1计数k0=ceil(m2)−1=floor(m2)+m%2−1;从0开始计数⌈x⌉={⌊x⌋=x,x∈Z⌊x⌋+1,x∉Z2(k-1)=a_1-a_k \\k=\frac{a_1-a_k}{2}+1 \\k_1=\frac{m-1}{2}+1=\frac{m+1}{2},m\%2=1 \\k_2=\frac{m-2}{2}+1=\frac{m}{2},m\%2=0 \\合起来写 \\k=ceil(\frac{m}{2});从1计数 \\k_0=ceil(\frac{m}{2})-1=floor(\frac{m}{2})+m\%2-1;从0开始计数 \\ \lceil{x}\rceil =\begin{cases} {\lfloor{x}\rfloor=x},&x\in{Z} \\ {\lfloor{x}\rfloor}+1,&x\notin{Z} \end{cases} 2(k−1)=a1​−ak​k=2a1​−ak​​+1k1​=2m−1​+1=2m+1​,m%2=1k2​=2m−2​+1=2m​,m%2=0合起来写k=ceil(2m​);从1计数k0​=ceil(2m​)−1=floor(2m​)+m%2−1;从0开始计数⌈x⌉={⌊x⌋=x,⌊x⌋+1,​x∈Zx∈/Z​

地推关系

  • m!!=m⋅(m−2)!!m!!=m\cdot{(m-2)!!} m!!=m⋅(m−2)!!

    • 从分割的角度,序列S包含的项数n可以这样确定
      • 相邻项的关系是ai=ai−1−2a_i=a_{i-1}-2ai​=ai−1​−2
    • 对于有限数列
      • 将第一项理解为,资源总量a1a_1a1​
      • 第二项为每次消耗的固定量资源(d)
      • 那么数列的项数和第一项和公差的比值a1d\frac{a_1}{d}da1​​有关

参考代码

  • # importing functools for reduce()
    # import functools as ft
    from functools import reducedef df_reduce(n):l = range(n, 0, -2)res = reduce(lambda x, y: x * y, l)#     print("n=%-3d-->" % n, "{:-^30}".format(list_str), "product_res=%d" % res)return resdef df_while(n):res = 1while (n > 0):res *= nn = n-2return resdef product(x, y):return x*ydef df_k(n):q = n//2r = n % 2k = q-1+rl = range(0, k+1)res_list = [n-2*i for i in l]res = reduce(product, res_list)return resdef df_recursive(n):if (n == 1 or n == 2):return nreturn n*df_recursive(n-2)def df_print(df_fun, n):res = df_fun(n)print("n=%-3d-->" % n, "product_res=%d" % res)def df_reduce_print(n):df_print(df_reduce, n)def df_while_print(n):df_print(df_while, n)def df_k_print(n):df_print(df_k, n)
    def df_recursive_print(n):df_print(df_recursive, n)
    def test(df_implements):for df_fun in df_implements:print("{:*^70}".format(str(df_fun)))list(map(df_fun, test_list))##
    test_list = [3, 4, 5, 8, 9, 16]
    if __name__ == "__main__":# res = list(map(df_while_print, test_list))df_implements = [df_k_print, df_while_print, df_reduce_print,df_recursive_print]test(df_implements)# list(map(df_recursive_print,test_list))# print(df_k(5))
  • PS D:\repos\PythonLearn\scripts>  py double_factorial.py
    ***************************
    n=3  --> product_res=3
    n=4  --> product_res=8
    n=5  --> product_res=15
    n=8  --> product_res=384
    n=9  --> product_res=945
    n=16 --> product_res=10321920
    ***********************
    n=3  --> product_res=3
    n=4  --> product_res=8
    n=5  --> product_res=15
    n=8  --> product_res=384
    n=9  --> product_res=945
    n=16 --> product_res=10321920
    **********************
    n=3  --> product_res=3
    n=4  --> product_res=8
    n=5  --> product_res=15
    n=8  --> product_res=384
    n=9  --> product_res=945
    n=16 --> product_res=10321920
    *******************
    n=3  --> product_res=3
    n=4  --> product_res=8
    n=5  --> product_res=15
    n=8  --> product_res=384
    n=9  --> product_res=945
    n=16 --> product_res=10321920
    PS D:\repos\PythonLearn\scripts>
    

相关内容

热门资讯

《荣耀战魂》战斗人物技能及游戏... 第1页:展开《荣耀战魂》好玩吗?相信很多玩家没机会上手,对其各方面体验如何并不了解,今天小编带来“q...
《NBA2K17》过人操作视频... 第1页:展开《NBA2K17》相对前作来说更加真实,而过人方面以往的方法明显不适用,虽然操作简单,但...
《实况足球2017(PES20... 第1页:展开《实况足球2017(PES2017)》中的精彩进球可以让很多玩家热血沸腾,那么下面小编就...
50岁中年必玩十大游戏推荐20... 人到中年,生活被家庭和琐事填满,忙碌之余总想来点轻松的消遣,不用费眼费神,50岁中年必玩十大游戏节奏...
卡丁车游戏有哪些介绍2026 ... 指尖驰聘风为伴,竞速逐乐无牵绊,操作简单不费脑,闲时比拼心欢颜,卡丁车游戏操作简单,节奏轻快,既能体...
武装直升机游戏哪些值得玩202... 去找到那种热血以及自由的感觉,武装直升机游戏主要说的就是一个真实以及热血的操控感,满足大家对于高空战...
十大最耐玩的3a游戏推荐202... 节奏快的时候不打紧,因为大家总可以找到让自己宽松的角落,十大最耐玩的3a游戏不需要凭借很多乱七八糟的...
龙城游戏哪些值得玩2026 质... 闲暇之余寻乐趣,龙城世界藏惊喜,龙城游戏以传奇热血为核心,融合PK竞技,养成探索等元素,凭怀旧感与高...
全网最火的手机小游戏合集 20... 全网最火的手机小游戏。不知道各位玩家有没有发现虽然现在排行榜上还是以大型手游为主,但是越来越多的玩家...
忍者神龟游戏下载合集 2026... 对于无数玩家来说,忍者神龟游戏是刻在童年记忆里的符号,从街机摇杆式操作到移动端指尖划落,这份属于纽约...