欧拉计划问题五的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?
思路:据题意2520是最小的能被1到10中任意一个数整除的数,求能被1到20中任意一个数整除的最小整数,我的想法还是遍历,比如说任意一个数,设置一个循环从20到1,如果能被20整除那么接着除19, 一直到2,如果都行那就输出,不行就pass,下一个接着来。说得好轻巧,但是采用的这个方法非常的暴力,就是传说中的暴力**法----穷举法,用matlab跑这个程序花了大概半个小时,这段时间内,守着屏幕,独自怎生的黑?简直就是望穿秋水,一边焦灼的等待。
脑海内浮现出婉约派著名词人李清照的那句诗-----这次第,怎一个愁字了得?突然发现在庞大的数据量之前(20的阶乘:factorial(20)=2.4329e+18),算能整除1到10的最小整数还好,这个程序两三秒就搞定了,但算能整除1到20的最小整数就一个字---等,穷举法显得如此的低效,甚至有点迷茫!看来得学点算法了,不然接下来的题目(用句河南话),我可能不中了!
for i = 2520:factorial(20) %1:factorial(10) 1到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
结果:232792560
有哪位朋友知道写博客时插入matlab代码块如何语法高亮,希望能指导一下,里面没有matlab语言的选项,不设置的话代码都是白色,我只好选择了Python的选项,然而每次看这个代码都是:不一样的代码,同样的color,难免会造成审美疲劳!代码有什么不足的地方大家可以改进一下,相互交流学习!