ページ 11

AOJのPrime Quadrupletについて(4つ子素数の問題)

Posted: 2016年6月05日(日) 14:18
by grayf
http://judge.u-aizu.ac.jp/onlinejudge/d ... sp?id=0222
入力された数字より、小さい4つ子素数のうち尤も大きい数を出力する問題なのですが、Runtime Errorが返されてしまいます。
恐らく、配列の添え字を大きくし過ぎたせいなのだと思うのですが、どのように直せばよいのでしょうか?教えてください。

コード:

#include<stdio.h>
#include<math.h>
#define N 10000000

int main(){
	int a[N];
	int b;
	int i, j, p;
	int c[1000];
	int d[1000];
	p = 1;
	while (1==1){
		scanf("%d", &c[p]);
		if(c[p]!=0)p++;
		else break;
	}
		b = (int)pow(N, 0.5);
		a[0] = -1;
		for (i = 2; i <= b; i++){
			for (j = 2; j <= N/ i; j++){
				a[i*j - 1] = -1;
			}
		}
	for (i = 1; i < p; i++){	
		for (j = c[i];j>0; j--){
			if (a[j - 1] != -1){ 
				if (a[j - 2 - 1] != -1 && a[j - 6 - 1] != -1 && a[j - 8 - 1] != -1){
					d[i] = j;
					j = 0;
				}
			}
		}
		printf("%d\n", d[i]);
	}
	return 0;
}

Re: AOJのPrime Quadrupletについて(4つ子素数の問題)

Posted: 2016年6月05日(日) 14:40
by みけCAT
配列の型の前にstaticを付けてスタックを消費しないようにするといいかもしれません。

Re: AOJのPrime Quadrupletについて(4つ子素数の問題)

Posted: 2016年6月06日(月) 08:51
by grayf
回答ありがとうございます。
メモリをこっちで確保すれば、通りました。