設想要複製出的最後結果是1,2,4,8,16...行,
複製次數正好是2n(2的n次方)(n為正整數)。
如果是3,5,6,7,9...行呢?
例如:6
1-2-3-4-5-6-7-8...
找4---↑
4=2^2
2+1=3(再複製一次兩行)
或是...
6=2^2.5849625007211561814537389439478...
無條件進位2.5849625007211561814537389439478...
要如何計算一個正整數是2的幾次方呢?
"log"(對數)
loga(b)=c --> ac=b
所以a需要=2
但是對於使用Python或C++的人來說,
沒有所謂"log(a,b)"這種東西,
只有log(b),代表loge(b)(e是一個常數,e=2.71828182846......)(loge(b)也可寫成ln(b)),
我們要用"loga(b)=ln(b)/ln(a)"這個公式,
所以程式寫成:
log(b)/log(2)
以C++說
log(2)會得到整數
因此,直接帶換成0.69314718055994530942
C++的<math.h>標頭檔內含"#define M_LN2 0.69314718055994530942"
所以我們把程式寫成"log(b)/M_LN2"
無條件進位:ceil()
所以我們把程式寫成"ceil(log(b)/M_LN2)"
原文有誤,對不起
設想要複製出的最後結果是1,2,4,8,16...行,
複製次數正好是2n(2的n次方)(n為正整數)。
如果是3,5,6,7,9...行呢?
例如:6
1-2-3-4-5-6-7-8...
找4---↑
4=2^2
2+1=3(再複製一次兩行)
或是...
6=2^2.5849625007211561814537389439478...
無條件進位2.5849625007211561814537389439478...
要如何計算一個正整數是2的幾次方呢?
"log"(對數)
loga(b)=c --> ac=b
所以a需要=2
但是對於使用Python或C++的人來說,
沒有所謂"log(a,b)"這種東西,
只有log(b),代表loge(b)(e是一個常數,e=2.71828182846......)(loge(b)也可寫成ln(b)),
我們要用"loga(b)=ln(b)/ln(a)"這個公式,
所以程式寫成:
log(b)/log(2)
以C++來說
log(2)會得到整數
因此,直接帶換成0.69314718055994530942
C++的標頭檔內含"#define M_LN2 0.69314718055994530942"
所以我們把程式寫成"log(b)/M_LN2"無條件進位:ceil()
所以我們把程式寫成"ceil(log(b)/M_LN2)"
還是有誤,對不起
以C++來說
log(2)會得到0.693147(不是這個原因)
算兩次log較費時
因此,直接帶換成0.69314718055994530942
C++的標頭檔內含"#define M_LN2 0.69314718055994530942"
所以我們把程式寫成"log(b)/M_LN2"無條件進位:ceil()
所以我們把程式寫成"ceil(log(b)/M_LN2)"