这是我的代码,用于查找两个整数之间的质数。它可以编译,但在codechef上给出运行时错误SIGXFSZ。
#include <bits/stdc++.h>
using namespace std;
int main() {
long long n,m;
int t;
cin>>t;
while(t--)
{
cin>>m>>n;
for(long long j=m;j<=n;j++)
for(long long i=2;i<=sqrt(j);i++)
if(j%i==0)
break;
else cout<<j<<"\n";
cout<<"\n";
}
return 0;
}
答案 0 :(得分:3)
似乎您在逻辑上是错误的。
根据我的理解,您应该在两个数字之间打印质数。
但是您的代码有逻辑错误。
1)代码未将2和3视为素数。
说m = 1
,n = 10
。对于j = 2, 3
,即使只有一次也不会执行内部循环。因此,输出不会显示为用户。
2)else cout<<j<<"\n";
语句放置不正确,因为它会导致素数被多次打印以及某些复合数。
示例:
对于j = 11
,此代码将打印两次11
(for i = 2, 3
)。
对于j = 15
,此代码将是15
一次(for i = 2
),尽管它是一个复合数字。
答案 1 :(得分:0)
您没有解释您的问题,而是为您的代码编写了代码。您的程序需要两个单独的输入:首先,要执行的试验次数;其次是两个数字,表示每次审判的开始和结束。
您的代码逻辑不正确且不完整。如果要始终使用括号,这可能很清楚。最内层的循环需要在非素数上失败,但是只有break
发出素数信号失败,因此除非循环完成,否则不可能有一个。您声明素数的位置不正确。要正确处理这种情况,需要某种标记变量或其他修复程序来模拟带标签的循环:
int main() {
int trials;
cin >> trials;
while (trials--)
{
long long start, stop;
cin >> start >> stop;
for (long long number = start; number <= stop; number++)
{
if (number < 2 || (number % 2 == 0 && number != 2))
{
continue;
}
bool prime = true;
for (long long odd = 3; odd * odd <= number; odd += 2)
{
if (number % odd == 0)
{
prime = false;
break;
}
}
if (prime)
{
cout << number << "\n";
}
}
}
return 0;
}
该代码采用一种最简单的方法来处理偶数和偶数,这是一种特殊情况,并着重于循环奇数。
答案 2 :(得分:-1)
这基本上是“超出文件大小”,这意味着输出文件的大小大于允许的大小。
请检查程序的输出文件大小。