当我想要大于1000000的质数时,下面的质数生成器代码显示了一个错误
The following prime generator code shows an error when i want prime numbers greater than 1000000.Why?
当我想要大于1000000的素数时,下面的素数生成器代码显示了一个错误。为什么?起初,它似乎发生了b' because of int,所以我把它改成了long,但错误仍然存在....从技术上讲,如果程序运行后出现错误,则显示"primegen.exe已停止工作"
#include <iostream>
using namespace std;
int main()
{
long int a,c,k,d;
k=0;
cin>>a;
cin>>d;
long int b[a];
b[a-1]=0;
for(long int i=2;i<=a;i++)
{
for(long int j=2;j<=(i/2);j++)
{
c=1;
if ( i%j!=0 )
{
continue;
}
else
{
c=0;
break;
}
}
if (c!=0)
{
b[k]=i;
//++k;
}
else b[k]=0;
++k;
}
for(long int i=d;i<a;i++)
{
if (b[i]!=0)
{
cout<<b[i]<<"t";
}
}
cin.ignore();
cin.get();
return 0;
}
此代码中没有错误
代码太慢了,虽然,它几乎是二次的。在ideone上达到100万的预计时间:290秒。
修正后,通过将内部for
循环条件由for(...;j<=(i/2);...)
改为for(...;j<=(i/j);...)
,经验运行在~ n^1.45,在Ideone上运行1.27秒达到100万。
定义静态数组在这种情况下没有帮助。因为c++中不允许声明这么长的静态数组;你可以试试
int *b = new int [a];
动态声明数组大小(即数组大小将在运行时决定)。在变量'a'超过int(-2,147,483,648到2,147,483,647)的范围之前,代码应该可以工作。
相关文章:
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- Clion显示错误,但可以使用Cmake成功构建代码
- 代码使用向量成功运行,但使用数组显示错误
- 这两个代码片段相似,但显示的结果不同
- 与clang++一起使用的VS代码在构建良好的C++文件中显示错误
- 代码未在联机编译器上显示结果
- 程序显示以退出代码 0; 结束
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 为什么我的代码块上没有显示输出?
- Qt GUI使用Qfiledialogbox和qlabel显示视频,这是我的代码
- 执行此代码时,它不显示任何输出.为什么?
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- 为什么此代码中显示"*** stack smashing detected ***: <unknown> terminated Aborted (core dumped) "错误?
- objdump 不显示机器代码,但显示 ASM
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- 为什么当我在 c++ 中运行函数时,我的代码显示数字 53
- 我只是在寻找模板,在我的书中找到了这段代码,这显示了隔离错误?
- 我的代码厨师提交显示错误的结果
- 删除矢量显示代码 c++ 段时答案更改