1. 程式人生 > >尤拉計劃問題五matlab實現

尤拉計劃問題五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,難免會造成審美疲勞!程式碼有什麼不足的地方大家可以改進一下,相互交流學習!