前言

 

國高中老師有教一點點 Html 語法,

但是本人沒學過C 語言.....

 

只是常常摸電腦,再加上修過一堂課叫做邏輯,

這可以算是我第一支正式的程式!

 

001  

 

下載連結:https://drive.google.com/open?id=1dhe2ViqI57ey1EvRkSQRoovy1nuYpSQR


 

 

  程式介紹

 

在用之前,請到Excel 選項裡面,公式的地方,

啟用反覆計算,然後次數改成1。這樣就能看它逐步計算了。

可以隨便選一格空白的格子,然後按一下Del 鍵,它就會計算一輪了!

002  

 

首先,左上方 B5 的整數判別,是我在想怎麼判斷是不是整數,

於是底下的公式是: =IF(INT(B5)=B5,"整數","非整數")

簡單來說,就是無條件捨去後是不是等於自己。

 

之後,F6 是輸入數字處,沒有公式 XDD

 

先講 F10 除數,公式: =IF(I10=2*F6,H12,2)

意思是如果數字沒有換,那麼就用H12 的數字;要不然,就從2 開始。

換數字怎麼判斷等一下再講,

設置這個判斷而不是直接用H12 的原因是,想讓它在數字換的時候,從2 重新跑。

 

F11 的整數判斷,公式: =IF(INT(F6/F10)=(F6/F10),1,0 )

如果是就顯示1,不是就顯示0

 

F12 判斷是否要加,公式: =IF(F11=0,IF(F10>F8,0,1),0)

因為Excel 似乎沒辦法直接 "遙控" 另一格,讓另一格+1

所以,就用這個判斷來顯示1,然後讓另一格加它。

公式簡單來說,就是如果整除,就不加了;如果不整除,就繼續加,顯示1。

F10>F8 的判斷等一下再講。

 

H12 那格很簡單,就是: =F10+F12

把除數再加上F12,所以會+1 或者是+0

 

這邊用的主要流程是,如果除數X 不整除,

F12 顯示+1,H12 就是 (X+1)

然後,下一輪,除數就會等於H12,如此就達到了除數一直變大的效果了!

 

有一個小撇步,就是如果要檢驗Y 是不是質數,

只要檢測各個小於根號Y 的質數就好了,

因為,Y 的因數一定是成對的,一個大的會對一個小的,

所以,小的那個,頂多是根號Y,不會比根號Y 還大! (要不然就不叫小的那個了....)

 

因此,F8 設計了一個加速計算的,公式: =INT(F6^(1/2))+1

它就是根號Y  (其實比根號Y 還大一點點)

F10>F8 的判斷,就是為了加速計算。

如果除數比F8 還大,而且依然沒有整除,那麼就停止計算。

 

最後,來到了一個問題,就是 "到底該怎麼偵測數字換了沒?"

Finally,我找到了一個方法,就是用一格當作延遲者

F14 延遲者那格,公式: =IF(H12>0,F6,F6)

配合I10 的換數字指標,公式: =F6+F14

數字換了之後,F14 在第一輪計算時,比較晚計算到。

然而,I10 比較早計算到。

舉例來說,之前待測數字是133,現在改成了137,

I10 比F14 還早計算,因此就會把 "待測的137",加上 "F14的133"

所以,數字就不會是137 的兩倍了!

這就是除數那裡,換數字的判斷設定了。

如果I10 等於待測數字的兩倍,那麼就繼續算;如果不是等於兩倍,代表剛換數字,所以就從2 開始計算。

 

F17 結果那格,公式滿長的: =IF(F6=F10 , "它是質數" , IF( F12=0 ,  IF( F11=0, "它是質數" , "不是質數,最小公因數是")  , "計算中...")  )

意思是如果除數 = 待測數字,就顯示 "它是質數"

如果還不等於,就看是不是還在加。還在加就顯示 "計算中...."。

    如果不加了,那要判斷是不是整除了。如果也整除了,就顯示 "不是質數,最小公因數是"。

    如果尚未整除,但是不加了....  為什麼尚未整除,數字比待測小,卻不加了呢?

那是因為加速計算的判斷,已經過了根號Y了,所以顯示 "它是質數"。

 

其實底下還有一格,F18 那格,公式: =IF(F12=0, IF(F11=1,F10,"") ,"")

意思是如果不加了,而且整除,就會顯示出除數。不然都不顯示。

這就是配合結果那格,"最小公因數是 xxx "

11  

 

相关文章