スタックオーバーフロー
6行目のa[MAX]の部分をローカル変数で定義すると、案の定スタックオーバーフローだった。
ので、staticで宣言しなおし。
グローバル変数で定義してもよかったけど、どうせ関数ないしなぁ。
提出は来週なので、アルゴリズムを改良しとかねばなぁ。
#include<stdio.h> #include<stdlib.h> #define MAX 1299710 int main(void){ int cnt,cnt2,temp,temp2; static int a[MAX]; for(cnt=0;cnt<MAX;cnt++){ a[cnt]=0; } for(cnt=2;(cnt^2)<MAX;cnt++){ temp=1; while(a[cnt]!=0){ temp++; cnt++; } a[cnt]=temp; for(cnt2=2;(temp2=cnt2*cnt)<MAX;cnt2++){ a[temp2]=-1; } } cnt2=0; /* for(cnt=1;cnt<MAX;cnt++){ printf("a[%d]=%d\n",cnt,a[cnt]); if(a[cnt]>0){ printf("%dは素数です\n",cnt); cnt2++; } } printf("素数は%d個ありました。\n",cnt2); */ int k; /* 入出力の設定 */ puts("OutputMode"); FILE *fpi,*fpo; //fpi 読み込むファイル fpo 書き込むファイル if((fpi=fopen("B.in","r"))==NULL){ fprintf(stderr,"NO:B.in"); exit(-1); } if((fpo=fopen("Result.txt","w"))==NULL){ fprintf(stderr,"ERROR:CAN'T MAKE OUTPUT FILE"); exit(-2); } while(fscanf(fpi,"%d",&k)!=EOF){ cnt=k; //printf("%dを処理します\n",k); if(k==0) break; while(a[cnt]<0){ cnt++; } if(k==cnt) cnt=0; fprintf(fpo,"%d\n",a[cnt]); } fclose(fpi); fclose(fpo); return 0; }