//计算n=2..32的素数pi(2^n)(参见A007053)//计算n=2..32的最大素数<=2^n(参见A014234)//C++源代码。在g++下愉快地编译。假设int>=32位。#包括#定义sieve_log2_bits_per_word 5#定义sieve_root_bits 16#定义sieve_bits(sieve_root_bits*2)#定义sieve_square_root(1<<sieve_root_bits)#定义sieve_word_index(odd_x)((odd\x)>>(sieve_log2_bits_per_word+1))#定义sive_bit_mask(odd_x)(1<<((odd\x)>>1)&((1<<sive_log2_bits_per_word)-1))#定义sieve_test(oddx)(sieve_words[sieve_word_index(odd_x)]和sieve_bit_mask(odd\x))#定义sieve_clear(odd_x)(sieve_words[sieve_word_index(odd_x)]&=~sieve_bit_mask(odd_x))无符号int sive_words[1<<(sive_bits-sieve_log2_bits_per_word-1)];int main(int argc,char*argv[]){for(int i=sizeof(sieve_words)/sizeof(sive_words[0])--i>=0;){sieve_words[i]=(无符号整数)-1;}筛分清澈(1);对于(int i=3;i<sieve_square_root;i+=2){如果((i+1)&i)==0){int log2i=0;对于(intj=i;j>0;j>>=1){log2i++;}printf(“正在初始化筛选--2^%d\n”,log2i);}if(筛分试验(i)){无符号int delta=i*2;for(无符号整数j=i+delta;j>delta;j+=delta){筛分_清洁(j);}}}int prime_pi=1;//2无符号整数i;无符号int last_p;对于(i=3;i>1;i+=2){if(筛分试验(i)){prime_pi++;最后p=i;}如果((i+1)&i)==0){int log2i=0;for(无符号整数j=i;j>0;j>>=1){log2i++;}printf(“%d个素数<2^%d--最后一个素数%u\n”,prime_pi,log2i,last_p);}}返回0;}/*Fred Curtis(弗雷德(AT)f2 org),2009年12月8日*/