簡體   English   中英

具有大階乘的數學(例如除法?)

[英]Mathematics with large factorials (e.g. division?)

我試圖找到包含長度大於50的循環的100個數字的置換百分比。這涉及數學與大階乘的除法運算,這不能很快地手動完成,因此我需要求助於編程。 例如,這些術語包含

(3!/ 100!)*((99!/ 3!)+(98!/ 2!)+(97!/ 1!)+(96!/ 0!))

可以重新排列所有術語以提供一個大數(> 2 ^ 64),只需將其除以100! 得到我的答案。

我想了很多,仍然是C ++的新手,我不確定如何進行大數除法。 通常,當我處理大型階乘時,我會將數字的數字輸出到數組中並通過它進行乘法運算,但是我不完全確定如何進行除法運算。 用C ++處理大量數學的最佳方法是什么?

從等式的結構(一個非常大階乘的倒數與一些大小相同的大階乘的倒數)可以明顯看出,可能發生許多抵消。 這意味着即使沒有任何計算,也可以使用一些非常簡單的代數和一點點運氣來解決此問題。

讓我們用一些無辜的小寫字母替換階乘,以免被大數字嚇倒。

用0! 根據定義= 1,而1!= 1,我們可以跳過這些值並使用以下替換:

a = 2 !, b = 3 !, v = 96 !, w = 97 !, x = 98 !, y = 99 !, z = 100!

那給

(b/z)*(y/b + x/a + w + v)

擴大

b*(y/b + x/a + w + v) * 1/z

擴展分子(為了清晰起見,讓我們使用一些ASCII藝術)

                      b*x
 y +  (b*w) + (b*v) + ---
                       a
 ------------------------
            z

將其全部壓縮一小部分

(a*y) + (a*b*w) + (a*b*v) + (x*b)
---------------------------------
             (a*z)

拆開

 a*y     a*b*w     a*b*v     x*b 
----- + ------- + ------- + -----
 a*z      a*z       a*z      a*z 

是的,看起來不錯,我們可以把數字放回去

 2!*99!       2!*3!*96!       2!*3!*97!      3!*98!
--------- + ------------- + ------------- + ---------
 2!*100!       2!*100!         2!*100!       2!*100!

第一輪取消(可能已經在信函階段完成)

  99!      3!*96!      3!*97!     3!*98!
------ + ---------- + -------- + --------
 100!       100!        100!      2!*100!

階乘相互抵消,但僅部分抵消

第一步

 1         1*2*3        1*2*3     1*2*3
---  + ------------ + --------- + ------
100    97*98*99*100   98*99*100   1*2*99*100

第二步

 1           1            1          1
---  + ------------ + -------- + -------
100    97*98*33*50    98*33*50   2*33*50

公分母

97*98*33*50*2 + 100*2 + 100*97*2 + 100*97*98
--------------------------------------------
           100*97*98*33*50*2

通過將100分解為按摩分子

97*98*33*50*2 + 100*(2*98 + 97*98)
----------------------------------
       100*97*98*33*50*2

部分

  97*98*33*50*2      100*(2*98 + 97*98)
----------------- + -------------------
100*97*98*33*50*2    100*97*98*33*50*2

取消

 1     2*98 + 97*98
--- + --------------
100   97*98*33*50*2

部分

 1        2*98             97*98
--- + -------------- + --------------
100   97*98*33*50*2    97*98*33*50*2 

取消

 1        1          1
--- + -------- + -------
100   97*33*50   33*50*2 

我們減少了98,就消除了。沖洗並重復直到找到最終結果:

  1
 ----
  97

是的,有時只需要一支鉛筆和一張空白紙;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM