当我尝试在M和N之间生成所有质数时,为什么会遇到运行时错误(M和N(包括M和N)
Why am I getting runtime error when I am trying to generate all prime numbers between m and n(m and n inclusive)?
当我试图在M和N之间生成所有质量时,为什么会遇到运行时错误(M和N包含)?
#include<iostream>
using namespace std;
typedef long long int ll;
int main()
{
ll n,m,i,ch,x,t;
cin>>t;
while(t--)
{
cin>>m>>n;
int a[n+1];
//a[n+1]={1};
for(i=2;i<=n;i++)
{
a[i]=1;
}
for(i=2;i<=n;i++)
{
if(a[i]==1)
{
x=2;
ch=0;
while((x*i)<=n)
{
if(a[x*i]==1)
{
a[x*i]=0;
ch++;
}
x++;
}
if(ch==0)
break;
}
}
for(i=m;i<=n;i++)
{
if(a[i]==1&&i!=1)
cout<<i<<"n";
}
cout<<'n';
}
return 0;
}
好,从您的评论中的链接中,我们有以下约束
m and n (1 <= m <= n <= 1000000000, n-m<=100000)
因此,您的算法很可能会在行中失败
int a[n+1];
对于大数字n:
n = 1000000000(1e9!)ints(4个字节)的数组需要3.7GB的RAM!
因此,您的方法对于大量的RAM过多,因此您的方法无法很好地工作!
(我可以在本地计算机上复制它,只需在数组定义之前和之后添加cout
消息)
编辑
要使此算法工作,您应该在堆上保留内存(而不是堆栈),并至少通过int -> unsigned char
最小化尺寸:
...
while(t--)
{
cin>>m>>n;
unsigned char *a = new unsigned char[n+1];
...
delete[] a;
}
相关文章:
- 为什么此代码存在运行时错误?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 为什么当 vector 为空时会显示运行时错误?
- 试图找出为什么我会收到运行时错误?
- 为什么我使用 std::copy() 收到运行时错误(分段错误)?
- 为什么我在此代码中收到运行时错误
- 为什么运行时错误!西格菲普
- 为什么BFS C 中的运行时错误
- 为什么我的代码给出运行时错误超时
- 为什么在C 类构造函数的正确编译后发生运行时错误
- 为什么我的程序在删除以下代码中的注释后会出现运行时错误?
- 为什么此函数中的运行时错误 C++ 深度优先搜索
- 为什么会出现运行时错误?我已经设置了长整
- c++分段错误:为什么这个程序给出运行时错误(SIGSEGV)
- 为什么当 std::sort 中的比较函数始终返回 true 时出现运行时错误
- 当我做出语句 root->right->right = newnode(7);注释,编译器显示运行时错误。谁能解释为什么?
- 为什么我的代码导致运行时错误
- 为什么矢量上的这段代码会给出运行时错误
- 为什么运行时错误出现在我的代码中