#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;
}
#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。
後面這段
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 在每次輸出後沒有歸零。