2016年3月16日 星期三

訓練數學感 91 ─ 90! = ?

http://4rdp.blogspot.com/2016/03/91-90.html

90! = ?


沒錯今天的題目就是這麼簡單,如果你算不出這麼大的數,那也可以告訴我後面有幾個零,以及末尾非零兩位數是多少?

22 則留言:

  1. 回覆
    1. 算得沒錯的話,應該是20個0

      刪除
    2. 更正
      手算因數分解如下:
      (2^86)(3^44)(5^20)(7^13)(11^7)(13^6)(17^5)(19^4)(23^3)(29^2)(31^2)(37^2)(41^2)(43^2)(47)(53)(59)(61)(67)(71)(73)(79)(83)(89)

      刪除
    3. 手算這題,真的需要細心與耐性,20個零不正確。
      問題的求解,可以用各種方法,計算機求解我也不反對,如果有程式,需附上程式。

      刪除
    4. 1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000

      刪除
  2. 來源:網路上的Code. Google 搜尋 "how to calculate large factorials in C". 演算法與小學教的直式乘法相同.

    回覆刪除
    回覆
    1. 正解,如果用 Python 寫程式,程式碼會更簡單。如果不用程式解,你會怎樣解這題?

      刪除
  3. 有幾個零的計算
    2*5*
    10*12*15*
    20*22*25*
    30*32*35*
    40*42*45*
    50*52*55*
    60*62*65*
    70*72*75*
    80*82*85*
    90
    共 21 個零。

    人計算的方法,我想法是類似上面的計算方法,拆成比較小的數字相乘。 需要一點時間想想。

    回覆刪除
    回覆
    1. 會有 21 個零是因為 25、50、75 等數值含有兩個因數 5。確實難題拆成許多小問題可以比較簡單解。

      刪除
  4. 除了慢慢從1乘到90以外,有其他方法?

    回覆刪除
  5. 如果是奇數階乘,可不可以用平方差公式簡化?
    例:n! (n為奇數)
    (1+n)/2=x (等差中項)
    n!=[x-(x-1)][x-(x-2)][x-(x-3)]...(x-2)(x-1)x(x+1)(x+2)...[x+(x-3)][x+(x-2)][x+(x-1)]
    =(x^2-1^2)(x^2-2^2)(x^2-3^2)....[x^2-(x-1)^2]

    回覆刪除
    回覆
    1. 利用平方差解題,是一個好方法,長乘法計算可以少一半。問題是再來要如何計算下一步?

      另外,你的式子還要再補上 x 乘項,
      n!=[x-(x-1)][x-(x-2)][x-(x-3)]...(x-2)(x-1)x(x+1)(x+2)...[x+(x-3)][x+(x-2)][x+(x-1)]
      =x(x^2-1^2)(x^2-2^2)(x^2-3^2)....[x^2-(x-1)^2]

      http://www.geocities.ws/goodprimes/FZFactorial.html,階乘的因數檢查可以參考這一篇。
      這題應屬於高中程度以上的難題。

      刪除
    2. 如果是找近似解,可以使用Stirling's formula. 但手算上面,一樣繁複: n!~sqrt(2*pi*n)*(n/e)^n。

      刪除
    3. 這個式子有在維基百科看到,https://zh.wikipedia.org/wiki/%E9%9A%8E%E4%B9%98
      說真的,日常生活中,階乘的應用不常見,不然數學家早就建快速查表,像是三角函數、對數、常態分布等

      刪除
    4. 階乘的話,我目前只有在排列組合中見過。

      刪除
    5. 是的,排列組合有用到,謝謝補充。

      加分題,除了排列組合,還有那些應用有用到階乘?

      刪除
    6. 泰勒展開式,Maclaurin 級數。這兩個最簡單就用在數值方法求exp(x), sin(x), cos(x)上面。
      二項式定理,機率統計,離散數學中會用到,另外Gamma function 是階乘的一般式。
      Legendre polynomials,用在微分方程或是函數逼近,近似曲線逼近。
      Bessel’s Function 中的 Jx 係數,用在微分方程。
      大概想到的就這些。

      刪除
    7. 謝謝行天下專業的補充,我是常看到無窮級數使用到它。

      刪除
    8. 查了一篇舊聞: http://4rdp.blogspot.tw/2014/07/taylor-series.html#more
      三角函數 "值" 的計算,除了泰勒展開式之外,還有另外一個快速地計算演算法。 CORDIC 演算法。
      先簡單提一下。

      刪除
    9. 謝謝補充,大略看一下,是採疊代計算快速收斂,找時間寫個程式試作一下。

      刪除
    10. 基本上要實作三角函數求值,泰勒展開式還是最為方便。其誤差項也非常容易知道。這裡有個 source code, IBM 的。有點複雜,但應該很容易懂。
      https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/ieee754/dbl-64/s_sin.c;hb=HEAD#l281

      刪除
    11. 行天下謝謝你補充,通常一般工程師都是直接用別人寫好的程式庫,不會探究這些細節,只有系統開發者必須了解原理與方法才有辦法寫出這些程式。

      刪除