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