0001 void eratosthenes(Rank n, char* file) { 0002 Bitmap B(n); //用位图模拟Eratosthenes的羊皮纸 0003 for (Rank r = 2; r < n; r++) B.set(r); //0和1都不是素数 0004 for (Rank i = 2; i*i < n; i++) //检查sqrt(n)以内的每个i(n以内的合数必有sqrt(n)以内的素因子) 0005 if (B.test(i)) //若确认i是素数 0006 for (Rank j = i*i; j < n; j += i) //则从i*i起,将能被i整除的每一个j 0007 B.clear(j); //都标记为合数(小于i*i的合数,必在此之前已被标记) 0008 B.dump(file); //将筛选标记统一存入指定文件,以便日后直接导入 0009 } //eratosthenes