c++ - 费马大定理算法

标签 c++ algorithm

我正在服用 this费马大定理的定义。

我尝试编写一个算法来验证它是否适用于小值:

#include <iostream>
#include <cmath>
using namespace std;

int main() 
{
    //a^n + b^n = c^n

    int a, b, c, n, count = 0;

    for (n = 3; n < 1000; n++)
        for (a = 1; a < 1000; a++)
            for (b = 1; b < 100; b++)
                for (c = 1; c < 1000; c++)
                {
                    if (a != b && b != c && a != c)
                    {
                        if (pow(a,n) + pow(b,n) == pow(c,n))
                        {
                            cout << "\na: " << a << " b: " << b << " c: " << c << " n: " << n;
                            count++;
                        }
                    }
                }

    cout << count << " combinazioni";

}

这是一段输出的屏幕: Image

这怎么可能?我是否遗漏了 C++ 编程中可能会得到错误结果的“大整数”?

最佳答案

你的 pow() 函数溢出了;请记住 int 的大小是有限的。

例如,pow(256, 4) 在 32 位上会溢出,pow(256, 8) 在 64 位上会溢出,即使您使用无符号数据类型也是如此。

从技术上讲,int 溢出是未定义的行为,因此,任何事情 都可能发生,包括环绕(即回到 0)或鼻恶魔

unsigned int 根据标准,计算以 WIDTH 的幂为模 2;即总是环绕。

关于c++ - 费马大定理算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17065392/

相关文章:

c++ - 我可以在 windows visual studio 中编写 C++ 或任何代码,然后将 'import' 写入 Linux 吗?

c++ - volatile 成员变量与 volatile 对象?

c++ - std::iterator 的错误指示器

java - 在Java中查找集合的所有分区

c++ - 使用指针的合法遗留代码突然变成了 UB

c++ - 打印 vector 值

Python Twisted TCP套接字如何设置TCP_NODELAY(禁用Nagle算法)?

algorithm - 从事件中选择项目,尽可能均匀分布

algorithm - 从 F# 中的 n 元树中提取叶路径

algorithm - 从区间列表的子集中找到最小值和最大值