我是在这个费尔马大定理的定义.
我试图编写一个算法来验证它的小值:
#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";
}
Run Code Online (Sandbox Code Playgroud)
这是一个输出屏幕:

怎么可能?我在C++编程中遗漏了一些可能导致错误结果的"大整数"吗?
Bat*_*eba 13
你的pow()函数溢出; 记住int一个有限的大小.
例如,即使使用无符号数据类型,pow(256,4)也将在32位溢出,64位溢出(256,8).
技术上int溢出是未定义的行为,因此,任何事情都可能发生,包括环绕(即回到0)或鼻子恶魔.
unsigned int根据标准,计算模2以WIDTH的功率增加; 即将永远环绕.
我错过了什么
你是.实际上相当多.让我列举一下.
pow不是整数.int保证能够包含在-32767到32767之间的数字.其实支持比相当多的许多实现,说-2147483648到2147483647许多实现有其他类型,可容纳更多数量的范围,例如0到18446744073709551616或有时340282366920938463463374607431768211456甚至115792089237316195423570985008687907853269984665640564039457584007913129639936.(如果你可以采取对数你头脑中有100位数的数字,你会注意到所有这些限制都是2的幂或接近它的东西.为了比较,