我正在自己研究MATLAB,并在Project Euler上做了第9个问题 它声明
“毕达哥拉斯三元组是一组三个自然数,a< b< c,为此,
a2 + b2 = c2 例如,32 + 42 = 9 + 16 = 25 = 52。
恰好存在一个毕达哥拉斯三重态,其中a + b + c = 1000。 找到产品abc。“
以下是我写的代码;然而,它编译,但不产生和输出。我希望得到一些关于错误的反馈,所以我可以解决它。
谢谢,
syms a;
syms b;
syms c;
d= 1000;
d= a + b + c ;
ab= a.^2 + b.^2;
ab= c.^2;
c
答案 0 :(得分:3)
我提出了一种矢量化方式(即不使用循环)来解决问题。它可能看起来相对复杂,特别是如果你来自其他编程语言;但是对于Matlab,你应该习惯这种接近问题的方式。
成分:
如果您不熟悉这些概念,请阅读这些概念,然后尝试自己解决问题(当然这是Project Euler的重点)。作为提示,下面的代码按以下方式进行:
a
和b
的所有可能值的1×1000向量。c
对应每对a
,b
a+b+c
1000
的行和列索引。那些指数是期望的a
和b
(为什么?)。a
和b
以及相应的c
的产品。一旦你尝试过自己,你可能想检查代码(将鼠标移到它上面):
ab = 1:1000; % step 1
cc = hypot(ab,ab.'); % step 2
sum_abc = ab+ab.'+cc; % step 3
[a, b] = find(sum_abc==1000); % step 4
a = a(1); b = b(1); % step 5
prod_abc = a*b*cc(a,b); % step 6