在c++中查找大素数:我的整数在哪里溢出
Finding a large prime in C++: where does my integer overflow?
我用c++编写了一个计算大素数的Atkin筛的实现。它可以很好地找到10^8个素数,但是当试图找到10^9个素数时,我得到了一个不正确的结果。
看起来我正在处理一个整数溢出,但是我不知道这是怎么可能的。我到处使用uint64_t
,期望的结果(22801763489)介于2^34和2^35之间。
我得到的结果是1326927009
。
相关代码如下:
uint64_t getPrimesAtkin(uint64_t Nn)
{
(...)
}
int main(int argc, char** argv) {
for (int a = 7; a < 10; a += 2)
{
clock_t begin = clock();
uint64_t prime = getPrimesAtkin(pow(10,a));
clock_t end = clock();
printf("p(10^%d)=%12d t=%4.3fn",a,prime, double(end - begin) / CLOCKS_PER_SEC);
}
}
我没有仔细阅读您的所有代码,但仅这一行就可以解释您的问题:
printf("p(10^%d)=%12d t=%4.3fn",a,prime, double(end - begin) / CLOCKS_PER_SEC);
这里您使用"%12d"
格式将64位素数传递给printf()
函数。该格式期望一个类型为int
的参数,而不管用于输出的位数是多少。要打印long long
(保证至少64位),使用"ll"
修饰符("%12lld"
)并通过强制转换(long long)prime
传递素数。
相关文章:
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 获取我的基类以递增派生类对象整数
- 为什么我的 Char* 在填充整数后为空?
- 如何检测除整数以外的任何内容是否传递给我的类构造函数?
- C++:为什么我的掷骰子函数在掷骰子数量时只返回偶数整数?
- 优化正在杀死我在 clang 6 中的整数溢出检查
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 我必须更改我的数字最后一个数字和第一个数字,但不要使用仅带有整数或循环的函数.例如从 12345 到 52341
- 在控制台上输出我从文件中读取的整数,将程序插入无限循环
- 我需要帮助创建一个评分系统,但它一直给我一个错误,注释掉的整数是给我带来麻烦的部分
- 我的程序不断四舍五入到最接近的整数
- 我可以将比较结果用作C++的整数吗?
- 我的C++程序有问题.涉及动态调整整数数组的大小
- 为什么我的整数不能传输到数组?
- 当我使用我的向量名称后跟包含整数变量的括号时,括号是什么意思
- 为什么我的C 代码无法计算整数的最大和最小值
- 我不知道如何创建一个以数字/字母顺序打印出我的整数或字符串的程序
- 我怎么能阻止我的整数显示为十六进制
- 为什么我的整数数学与std::pow给出错误的答案
- 在c++中查找大素数:我的整数在哪里溢出