第9题: 特殊勾股数

Problem 9: Special Pythagorean Triplet

题目

特殊勾股数

勾股数是满足以下条件的三个自然数:

$$a \lt b \lt c$$ $$a^2 + b^2 = c^2$$

例如 $3^2 + 4^2 = 9 + 16 = 25 = 5^2$。

只有一组勾股数满足 $a + b + c = 1000$。

找到这一组勾股数,并计算它们的积 $abc$。

Special Pythagorean Triplet

A Pythagorean triplet is a set of three natural numbers, $a \lt b \lt c$, for which,

$$a^2 + b^2 = c^2$$

For example, $3^2 + 4^2 = 9 + 16 = 25 = 5^2$.

There exists exactly one Pythagorean triplet for which $a + b + c = 1000$.

Find the product $abc$.

解题方法

暴力计算

直接从1到1000,遍历$a$、$b$、$c$,判断$a + b + c = 1000$是否成立。

公式法

查阅资料后可知任何勾股数均满足以下公式,其中$m>n$且$m$和$n$均为正整数:

$$ \begin{aligned} a&=m^2-n^2 \\ b&=2mn \\ c&=m^2+n^2 \end{aligned} $$

将上述公式代入$a + b + c = 1000$即可得到$m$和$n$与$1000$的计算公式。

$$ \begin{aligned} a+b+c&=1000 \\ m^2-n^2+2mn+m^2+n^2&=1000 \\ 2m^2+2mn&=1000 \\ m(m+n)&=500 \end{aligned} $$

观察公式可知$m$和$m+n$为$500$的因数,因此可从此处入手求解。

求解$500$的素因数可得

$$ 500=2^2*5^3 $$

根据$500$的素因数可以将此题求解过程转换为以下内容:

  • $500$的所有素因数组成一个多重集合$\{2,2,5,5,5\}$,记作$S$
  • 设$M$为$S$的非空子集,且$M\not =S$,则$m=\prod{M}$
  • 设$N$为$M$针对$S$的补集,则$m+n=\prod{N}$
  • $m>n>0$

最后通过遍历多重集合$S$的所有非空子集即可快速求解答案

$M$$m$$N$$m+n$$n$$m>n>0$
$\{2\}$$2$$\{2,5,5,5\}$$250$$248$false
$\{5\}$$5$$\{2,2,5,5\}$$100$$95$false
$\{2,2\}$$4$$\{5,5,5\}$$125$$121$false
$\{2,5\}$$10$$\{2,5,5\}$$50$$40$false
$\{5,5\}$$25$$\{2,2,5\}$$20$$-5$false
$\{2,2,5\}$$20$$\{5,5\}$$25$$5$true
$\{2,5,5\}$$50$$\{2,5\}$$10$$-40$false
$\{5,5,5\}$$125$$\{2,2\}$$4$$-121$false
$\{2,2,5,5\}$$100$$\{5\}$$10$$-95$false
$\{2,5,5,5\}$$250$$\{2\}$$10$$-248$false

因此$m=20$、$n=5$,所以$a=375$、$b=200$、$c=425$,求解$abc$即可。

正确答案

答案
31875000

参考链接

0%