#34638: #d658 #cpp #c++ #python #log #ln(2) #<cmath> #M_LN2


yp11151109@yphs.tp.edu.tw (907-33孫兆威)

學校 : 臺北市私立延平高級中學
編號 : 197230
來源 : [203.72.178.2]
最後登入時間 :
2024-11-18 14:45:16
d658. 11636 - Hello World! -- UVa11636 | From: [220.135.59.193] | 發表日期 : 2023-04-04 19:36

設想要複製出的最後結果是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)"

 
#34639: Re: #d658 #cpp #c++ #python #log #ln(2) #<cmath> #M_LN2


yp11151109@yphs.tp.edu.tw (907-33孫兆威)

學校 : 臺北市私立延平高級中學
編號 : 197230
來源 : [203.72.178.2]
最後登入時間 :
2024-11-18 14:45:16
d658. 11636 - Hello World! -- UVa11636 | From: [220.135.59.193] | 發表日期 : 2023-04-04 19:39

原文有誤,對不起

設想要複製出的最後結果是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)"



 
#42831: Re: #d658 #cpp #c++ #python #log #ln(2) #<cmath> #M_LN2


yp11151109@yphs.tp.edu.tw (907-33孫兆威)

學校 : 臺北市私立延平高級中學
編號 : 197230
來源 : [203.72.178.2]
最後登入時間 :
2024-11-18 14:45:16
d658. 11636 - Hello World! -- UVa11636 | From: [203.72.178.2] | 發表日期 : 2024-10-07 13:08

還是有誤,對不起

以C++

log(2)會得到0.693147

(不是這個原因)

算兩次log較費時

因此,直接帶換成0.69314718055994530942

C++的標頭檔內含"#define M_LN2        0.69314718055994530942"
所以我們把程式寫成"log(b)/M_LN2"

無條件進位:ceil()

所以我們把程式寫成"ceil(log(b)/M_LN2)"





 
ZeroJudge Forum