C++;和Python版本相同的算法给出不同的结果

C++;和Python版本相同的算法给出不同的结果,python,c++,algorithm,python-3.x,triangle-count,Python,C++,Algorithm,Python 3.x,Triangle Count,下面的代码是一个算法,用于确定具有整数中值的整数三角形的数量,其最大边小于或等于MAX。Python版本工作,但对于较大的N来说太慢了,而C++版本快得多,但没有给出正确的结果。 当max为10时,C++和Python均返回3。 当max为100时,Python返回835,C++返回836。 当max为200时,Python返回4088,C++返回4102。 当max为500时,Python返回32251,C++返回32296。 当max为1000时,Python返回149869,C++返回15

下面的代码是一个算法,用于确定具有整数中值的整数三角形的数量,其最大边小于或等于MAX。Python版本工作,但对于较大的N来说太慢了,而C++版本快得多,但没有给出正确的结果。

当max为10时,C++和Python均返回3。

当max为100时,Python返回835,C++返回836。

当max为200时,Python返回4088,C++返回4102。

当max为500时,Python返回32251,C++返回32296。

当max为1000时,Python返回149869,C++返回150002。

这是C++版本:

#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);
}
<>我不太熟悉C++,所以我不知道会发生什么事情(可能是溢出错误)。< /P>
当然,对算法的任何优化都是非常受欢迎的

这里可能有一些麻烦:

(sqrt(d)==floor(sqrt(d))) 

问题是
c
c
在python中)变量的范围不匹配。为了使它们与现有的C++范围相当,可以将Python循环更改为:

for C in range(int(math.floor(b/2)), int(math.floor(n/2))):
    ...
<> >使它们与现有的Python范围相等,可以将C++循环更改为:

for (int c = ceil(b/2.0); c < MAX/2 + 1; c++) {
    ...
}
for(int c=ceil(b/2.0);c

根据哪个循环原本是正确的,这将使结果匹配。

很好,一个是,C++版本使用<代码> Load <代码>,而Python使用的是代码> CEIL< /Cord>。此外,C++版本不划分2(代码)>(SqRT(d)=Load(Sqt(d)))/< > Python一个是<代码>(My.Sqt(2×D)/ 2)。iSyPixGeulter():Python版给我<代码> 4 < /COD>输入< <代码> 10 < /代码>。它们都乘以2(只是在不同的地方)。但是只有Python一个在平方根之后有2的除法。@ BrdBuffLood,YUP刚刚看到,但是注意到当Python版本乘以2时,它也被2i分割成可以复制你的C++结果,但是不是你的Python结果。我只是尝试改变C++中的循环,但是现在结果更为离谱。最大值为1000时返回150632!正确答案应该是什么?我的答案显示出,你的算法之所以不同,是因为它们的构造不同。正确的答案是149869,Python输出的一个。我有一个偷偷的怀疑,你所发布的算法没有给出答案,尤其是当我把Python算法转录到C++时,我得到的结果和Python的结果一样。作为参考,我在使用你发布的Python算法时也得到了<代码> 150632代码/>,即使是在C++中。我真的不知道该告诉你什么。以防万一,我在我的原始帖子中复制并粘贴了Python代码,输出是149869。另一方面,C++输出150632。
for (int c = ceil(b/2.0); c < MAX/2 + 1; c++) {
    ...
}