在此代码中,我输入一个测试用例编号t,然后输入t个数字(n)。然后我的代码打印第n个素数。在函数的第一行中,prime(),如果我写if(a > 43000) return;
然后代码完美地工作。但是如果我在同一个地方写if(a >= 165000) return;
,codeblocks说该程序已停止工作。但我不明白为什么。我的代码在特定条件下停止
#include <iostream>
#include <cmath>
using namespace std;
int p[15000];
void prime(int a, int i)
{
if(a >= 165000) return;
else {
int q = 0;
int s=sqrt(a), d=3;
while(d<=s){
if(a % d == 0) {
q = 1;
}
d += 2;
}
if(q == 0) {
p[i] = a;
i++;
a += 2;
prime(a, i);
}
else {
a += 2;
prime(a, i);
}
}
}
int main()
{
p[0]=2;
prime(3, 1);
int k, T;
cin >> T;
for(int i = 1; i <= T; i++){
cin >> k;
cout << p[k - 1] << endl;
}
return 0;
}
你发现了什么,当你通过调试运行呢? –
这是一个递归的_lot_堆栈溢出?尝试移动递归调用以更好地允许TCR。 –
如果您打算让其他人查看您的代码,至少可以做的是为您的变量命名。 – Derecho