前言
國高中老師有教一點點 Html 語法,
但是本人沒學過 C 語言.....
只是常常摸電腦,再加上修過一堂課叫做邏輯,
這可以算是我第一支正式的程式!
下載連結:https://drive.google.com/open?id=1dhe2ViqI57ey1EvRkSQRoovy1nuYpSQR
以下的講解,建議同時配合著程式對照著看。
程式介紹
在用之前,請到 Excel 選項裡面,公式的地方,
啟用反覆計算,然後次數改成 1。這樣就能看它逐步計算了。
可以隨便選一格空白的格子,然後按一下 Delete 鍵,它就會計算一輪了!
首先,左上方 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 "