C++ 为什么这只是一个小案子就失败了?问题链接-https://www.hackerearth.com/problem/algorithm/chandu-and-his-interns/description/#c190148
为什么这只是一个小案子就失败了?问题链接- 其他所有案件都没有问题。 我把除数少于4的三种情况都考虑进去了。(素数、1和素数的平方)C++ 为什么这只是一个小案子就失败了?问题链接-https://www.hackerearth.com/problem/algorithm/chandu-and-his-interns/description/#c190148,c++,algorithm,integer-division,number-theory,C++,Algorithm,Integer Division,Number Theory,为什么这只是一个小案子就失败了?问题链接- 其他所有案件都没有问题。 我把除数少于4的三种情况都考虑进去了。(素数、1和素数的平方) #包括 使用名称空间std; #为(i=0;i>n; int max=10000009; 整数素数[max]; int j; 对于(int i=2;i*i x; t=sqrt(x); if(素数[x]==0) CUT< P>您应该将这2行在代码之外>主< /代码>函数中移动,并重命名 max >代码>变量,因为它将变得模棱两可。此外,Max 变量应该是常数< />
#包括
使用名称空间std;
#为(i=0;i>n;
int max=10000009;
整数素数[max];
int j;
对于(int i=2;i*i x;
t=sqrt(x);
if(素数[x]==0)
CUT< P>您应该将这2行在代码之外>主< /代码>函数中移动,并重命名<代码> max >代码>变量,因为它将变得模棱两可。此外,Max 变量应该是<代码>常数< /> >,因为ISO C++禁止可变长度数组:
int max=10000009;
int prime[max];
所以应该是这样的
const int maximum=10000009;
int prime[maximum];
然后它通过了所有测试用例
这样大的数组不应该在main
中分配,除非您不增加堆栈大小或使用动态内存分配,否则将导致堆栈溢出。您可以阅读更多有关这方面的信息。这似乎是堆栈溢出
您正在堆栈上分配主数组
失败的测试用例用于接近主数组末尾的值9999863
如果将行移动到非基于堆栈的分配,例如通过
static int prime[10000009];
然后所有测试都通过。请提供您使用的实际输入、实际输出和预期输出的列表。否则,很难理解什么是“角落案例”你的意思是,那些定义是梅西……/我建议使用标准C++,避免任何扩展,比如可变长度数组。请不要重新定义语言关键字,如果你这样做,甚至不应该编译。@ vunpult它是未定义的行为,所以标准允许编译器做任何事情。
static int prime[10000009];