このコードでは、テストケース番号tを入力してt個の数値(n)を入力します。次に、私のコードはn番目の素数を出力します。関数の1行目で、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