欧拉计划问题五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,难免会造成审美疲劳!代码有什么不足的地方大家可以改进一下,相互交流学习!

猜你喜欢

转载自blog.csdn.net/qq_38910271/article/details/82951566