作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在服用 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";
}
这是一段输出的屏幕:
这怎么可能?我是否遗漏了 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/
我是一名优秀的程序员,十分优秀!