尤拉計劃問題五matlab實現
Problem 5 : Smallest multiple
2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
思路:(補充一點,之前我在matlab的live script執行,跑起來比較慢,但是後來我在command window執行時很快,僅需要 16.526701 秒,果然matlab執行很快,只怪我太年輕了!)
據題意2520是最小的能被1到10中任意一個數整除的數,求能被1到20中任意一個數整除的最小整數,我的想法還是遍歷,比如說任意一個數,設定一個迴圈從20到1,如果能被20整除那麼接著除19, 一直到2,如果都行那就輸出,不行就pass,下一個接著來。說得好輕巧,但是採用的這個方法非常的暴力,就是傳說中的暴力破解法----窮舉法,用matlab跑這個程式花了大概半個小時,這段時間內,守著螢幕,獨自怎生的黑?簡直就是望穿秋水,一邊焦灼的等待。
腦海內浮現出婉約派著名詞人李清照的那句詩-----這次第,怎一個愁字了得?突然發現在龐大的資料量之前(20的階乘:factorial(20)=2.4329e+18),算能整除1到10的最小整數還好,這個程式兩三秒就搞定了,但算能整除1到20的最小整數就一個字---等,窮舉法顯得如此的低效,甚至有點迷茫!看來得學點演算法了,不然接下來的題目(用句河南話),我可能不中了!
tic for i = 2520:factorial(20) %1:factorial(10) t = 20; %10 a = mod(i,t); while a == 0 t = t - 1; a = mod(i,t); if t == 0 b = i; % disp(b); break end end if t==0 break end end b toc
結果:232792560
有哪位朋友知道寫部落格時插入matlab程式碼塊如何語法高亮,希望能指導一下,裡面沒有matlab語言的選項,不設定的話程式碼都是白色,我只好選擇了Python的選項,然而每次看這個程式碼都是:不一樣的程式碼,同樣的color,難免會造成審美疲勞!程式碼有什麼不足的地方大家可以改進一下,相互交流學習!