<p>你掌握了系统</p>
<pre><code>(*1) a + b + c = 1000
(*2) a² + b² = c²
</code></pre>
<p>如果</p>
^{pr2}$
<p>那么</p>
<pre><code>a + b = 1000 - c
(a + b)² = (1000 - c)²
a² + 2ab + b² = 1000² - 2000c + c²
( a² + b² ) + 2ab = 1000² - 2000c + c²
</code></pre>
<p>但是,通过(*2),(a²+b²)=c²,然后</p>
<pre><code>c² + 2ab = 1000² - 2000c + c²
2ab = 1000² - 2000c
2000c = 1000² - 2ab
</code></pre>
<p>那么</p>
<pre><code>c = 500 - ab/(1000)
</code></pre>
<p>现在,你有了新的系统:</p>
<pre><code>(*3) a + b + 500 - ab/(1000) = 1000
(*4) c = 500 - ab/(1000)
</code></pre>
<p>另外,<strong>a</strong>、<strong>b</strong>和<strong>c</strong>是整数,<code>a<b<c</code>;
如果<code>a>332</code>,<strong>a</strong>必须至少是<em>333</em>,然后,
<strong>b</strong>应至少为<em>334</em>,然后,<strong>c</strong>应至少为<em>335</em>;<code>333 + 334 + 335 = 1002</code>。在</p>
<p>有了更多的数学知识,你可以做得更容易。在</p>
<hr/>
<pre><code>def p():
for a in range(1,333):
for b in range(a+1,(1000-a)/2):
if ( 1000*a + 1000*b + 500000 - a*b == 1000000 ):
c=500-((a*b)/1000)
print (a,b,c);print a*b*c
return
p()
</code></pre>
<p>结果:</p>
<blockquote>
<p>time python Special_Pythagorean_triplet.py </p>
<p><code>(200, 375, 425)
31875000</code></p>
<p><em>real</em> <strong>0m0.041s</strong> <em>user</em> <strong>0m0.036s</strong> <em>sys</em> <strong>0m0.000s</strong></p>
</blockquote>
<p>在<strong>if</strong>语句中:</p>
<pre><code>if ( 1000*a + 1000*b + 500000 - a*b == 1000000 )
</code></pre>
<p>您可以使用:</p>
<pre><code>if ( a + b + 500 - (a*b)/1000 == 1000 )
</code></pre>
<p>但是,在这种情况下,只有整数才重要:
对于第一种方法,您可以绕过除法及其舍入问题。在</p>