<p>下面的代码是一个算法,用于确定具有整数中值的整数三角形的数量,这些三角形的最大边小于或等于MAX。Python版本工作,但是对于较大的N来说太慢了,而C++版本快得多,但是没有给出正确的结果。在</p>
<P>当max为10时,C++和Python均返回3。在</p>
<P>当max为100时,Python返回835,C++返回836。在</p>
<P>当max为200时,Python返回4088,C++返回4102。在</p>
<P>当max为500时,Python返回32251,C++返回32296。在</p>
<P>当max为1000时,Python返回149869,C++返回150002。在</p>
<P>这是C++版本:</P>
<pre><code>#include <cstdio>
#include <math.h>
const int MAX = 1000;
int main()
{
long long int x = 0;
for (int b = MAX; b > 4; b--)
{
printf("%lld\n", b);
for (int a = b; a > 4; a -= 2){
for (int c = floor(b/2); c < floor(MAX/2); c+=1)
{
if (a+b > 2*c){
int d = 2*(pow(a,2)+pow(b,2)-2*pow(c,2));
if (sqrt(d)/2==floor(sqrt(d)/2))
x+=1;
}
}
}
}
printf("Done: ");
printf("%lld\n", x);
}
</code></pre>
<p>以下是Python的原始版本:</p>
^{pr2}$
<>我不太熟悉C++,所以我不知道会发生什么事情(可能是溢出错误)。在</p>
<p>当然,对算法的任何优化都是非常受欢迎的!在</p>