for(i=2; i*i<=max_val; i++) {
if(a[i]==0) {
count++;
for(j=i*i; j<=max_val; j+=i) a[j] = 1;
}}
for(; i<=max_val; i++) if(a[i]) count++;
オーバーフロー気にするならわければいい。