SIGABRT error for语言 - https://www.codechef.com/problems/PRIME1
SIGABRT error for - https://www.codechef.com/problems/PRIME1
我使用eratosthenes筛来解决这个问题,但它给了我SIGABRT错误,虽然我的代码在代码块....上工作得很好请帮我修改这段代码以删除错误....
My code is…
#include<vector>
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
unsigned long int t, n, m,i,j;
vector<int> prime;
cin>>t;
while(t--)
{
cin>>m;
cin>>n;
while(!(1<=m&&m<=n&&n<=1000000000&&n-m<=100000))
cin>>m>>n;
prime.resize(n);
for(i=0;i<n;i++)
prime[i]=1;
prime[0]=0;
prime[1]=0;
for(i=2;i<sqrt(n);i++)
{
if(prime[i]==1)
{
for(j=i;i*j<=n;j++)
prime[i*j]=0;
}
}
for(i=m;i<=n;i++)
{
if(prime[i]==1)
cout<<i<<endl;
}
cout<<endl;
prime.resize(0);
}
return 0;
}
您的j
循环允许i*j
等于n
,但是大小为n
的向量必须从0
索引到n-1
。现有代码允许越界引用元素。
同样的问题也可能出现在最后一个循环中
SIGABRT由库例程发出。
在程序中有两个库例程:std::vector
和sqrt
。
将sqrt(n)
赋值给const变量,或者用:(i * i) < n;
您需要验证:prime[i*j]
是一个有效的位置。换句话说,(i * j) < n
.
关于素数的一些信息(可以帮助你编写程序):
- 素数除2外均为奇数
- 您的测试值可以从3开始,并添加2以获得下一个值。
- 通过在数组中查找值可以节省一些时间已知值。
- 乘法通常比除法快。试着重写你的试着用乘法而不是除法。
- 使用可以包含最大值的数据类型
相关文章:
- 为什么可变大小的数组会导致Codechef出现错误答案
- 为什么当我从语句检查中删除"+ mod"时,以下程序给出错误的答案。问题链接:https://www.codechef.com/problems/FFC219B
- 如何让访问www-data用户运行使用 /dev /ttys1的流程
- Luci 无法启动请求的 CGI 程序:/www/cgi-bin/sample.cgi:执行错误
- Unordered_set不在codechef ide上工作
- spoj http://www.spoj.com/problems/JULKA/
- 我的系统出错了,程序运行正常,但 submittionhttp://www.spoj.com/problems/NITT
- SIGSEGV(signal 11) 'segmentation fault' in FCTRL2 codechef
- CodeChef 中代码的运行时错误 (SIGSEGV)
- .NET 从具有 www 接口的打印机获取数据
- SIGSEGV动态编程错误-CodeChef
- 将日期格式Www-Mmm-dd hh:mm:ss yyyy转换为c++中的dd hh:mm:ss字符串
- CodeChef每日培训错误答案
- chrome和firefox浏览器不将WWW-Authenticate标头中的kerbros令牌发送到Negotiate
- 删除`www.`来源于问题5.5中的QUrl
- Content-Type: application/x-www-form-urlencoded in curl
- 甜甜圈连锁店- codechef
- CodeChef问题:最小最大值
- 网页抓取器C++类似于Perl的WWW::Mechanize?
- SIGABRT error for语言 - https://www.codechef.com/problems/PRIME1