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


u10600040 (u10600040)


#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)


#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)


後面這段

  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 在每次輸出後沒有歸零。