Problem 12 :
The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
Let us list the factors of the first seven triangle numbers:
1: 1
3: 1,3
6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28
We can see that 28 is the first triangle number to have over five divisors.
What is the value of the first triangle number to have over five hundred divisors?
思路 :
据题意,三角数是由自然数迭代相加而产生的,比如第七个三角数28 = 1 + 2 + 3 + 4 + 5 + 6 + 7,而其有1,2,4,7,14,28等6个除数,现在题目想让我们求除数大于500个的三角数是什么?
我的思路还是迭代,比如说给你一个三角数,就让该三角数在for回圈里进行循环,从1开始除,若能被整除,则让除数个数加1,一直除到本身,若除数个数小于500,则除数个数清零,产生新的三角数,再进入循环,计算的数据量也是非常大,思路就是直接法破解!
tic
a = 0; %lteration triangle number
k = 1; %number pointer
t = 1; %the first triangle number
i = 0; %the nuber of divisors
while i < 500
for j = 1:t
if mod(t,j) == 0
i = i + 1;
end
end
if i < 500
i = 0;
k = k + 1;
a = 1:k;
t = sum(a);
else
disp(t);
break
end
end
t
toc
结果 :76576500
小结 :
这个方法也是暴力破解,我还是先摆一张图片让大家感受一下:
程序运行了7447.447333秒,共计124分钟左右,两个小时,回头看看,发现我自己真是很执着,没有任何的技巧,硬算出来的,希望能抛砖引玉!