1. 程式人生 > >數學學習之階乘

數學學習之階乘

今天看了一會《離散數學及其應用》的第一章後面的上機題的第一道題。

求n!的位數在100到100之間的最大的n。

      要解決這個問題,首先就來研究一下階乘的性質。

      查一下wiki百科,就會發現關於階乘有個斯特林公式n!\sim\sqrt{2\pi n}\;\left(\frac{n}{e}\right)^{n}    (有興趣戳這裡),那麼我們就可以很快的求出n的階乘。但是我們不需要求出n的階乘,只需要知道它有多少位。所以現在就要知道怎樣求一個數有多少位了。答案就是log(n)+1。下面是簡單證明:

      設一個數為n,它有w位,則它可表示為n=c+10^(w-1),其中c<10。所以w=log(n)+1。

      所以有斯特林公式,就可以很快的求出n的階乘有多少位了。

不過當n不大的時候,可以有log(10)=log(1)+······+log(n)得到。可以看一下(Poj 1423 big bumber )就是求一個數有多少位。

      因此,解決上面的問題求n!的位數在100到100之間的最大的n,就只需要簡單的列舉下就可以了。

    既然在看階乘,就一下把相關的題目做一做吧。

     將n!展開:n!=1*2*3*4*5······*n。要想知道末尾有多少零,只需知道有多少個2和5相乘就可以了。又因為在n!中5比2少很多,只需要知道有多少個5既可以了,即在n!中,因子5出現了多少次。關於這個問題,《具體數學》中有所提及。

     給定一個素數p,在{1,2,3,···n}中,它的倍數有ceil(n/p)個。

            則p的平方, 在{1,2,3,···n}中,它的倍數有ceil(n/p^2)個。

    依次類推,就知道在{1,2,3,···n}中,素數p一共出現了多少次。