#13698: 我這樣寫為甚麼是RE?


u10600040 (u10600040)

學校 : 臺北市立麗山高級中學
編號 : 72785
來源 : [59.125.98.87]
最後登入時間 :
2019-05-02 15:33:56
a121. 質數又來囉 | From: [163.21.208.253] | 發表日期 : 2018-04-09 16:21

#include<stdio.h>

int main(){
int d[10000]={0},j,i;
for(j=2;j<10000;j++){
if(d[j]==0){
i=2;
while(i*j<10000){
d[i*j]=1;
i++;
}
}
}
d[1]=1;








int a,b,c,e=0;

while(scanf("%d%d",&a,&b)!=EOF){
if(a>b){
for(c=b;c<a;c++){
if(d[c]==0)
e++ ;

}
}
else{
for(c=a;c<b;c++){
if(d[c]==0)
e++;

}
}
printf("%d",e);
}
return 0;
}

 

 

 

 
#13699: Re:我這樣寫為甚麼是RE?


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
a121. 質數又來囉 | From: [1.173.98.87] | 發表日期 : 2018-04-09 18:20

#include <stdio.h>

int main(){
  int d[10000]={0},j,i;
  for(j=2;j<10000;j++){
    if(d[j]==0){
      i=2;
      while(i*j<10000){
        d[i*j]=1;
        i++;
      }
    }
  }
  d[1]=1;

最大的問題在前面這段,我理解是打算建表,範圍從 0 ~ 9999;但題目的範圍 1<=a<=b<=100000000 會讓你後面的 c 會超出你的範圍,造成 RE。

 
#13700: Re:我這樣寫為甚麼是RE?


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
a121. 質數又來囉 | From: [1.173.98.87] | 發表日期 : 2018-04-09 18:38

後面這段

  int a,b,c,e=0;

  while(scanf("%d%d",&a,&b)!=EOF){
    if(a>b){
      for(c=b;c<a;c++){
        if(d[c]==0)
          e++ ;
      }
    }
    else{ 
      for(c=a;c<b;c++){
        if(d[c]==0)
          e++;
      } 
    }
    printf("%d",e);
  }

請注意題目敘述「a到b之間(包含a,b)」,以及你的 e 在每次輸出後沒有歸零。

 
ZeroJudge Forum