C语言程序设计100例之(12):Eratosthenes筛法求质数
例12 Eratosthenes筛法求质数 问题描述 Eratosthenes筛法的基本思想是:把某范围内的自然数从小到大依次排列好。宣布1不是质数,把它去掉;然后从余下的数中取出最小的数,宣布它为质数,并去掉它的倍数。在第1步之后,得到质数2,筛中只包含奇数;第2步之后,得到质数3,一直做下去,当筛中为空时结束。 用Eratosthenes筛法求给定区间内的所有质数。 输入格式 两个整数a和b,其中1≤a≤b≤10000 输出格式 输出给定范围[a,b]间的所有质数,输出时每个质数占6列,每行输出10个质数。 输入样例 100 200 输出样例 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 (1)编程思路。 下面采用自顶向下逐步求精的方法解决这个问题。 1)先写出程序的总体框架 初始化,将所有的数都放在筛子中; k=2; while(k<=N) { 用k将筛子中的数2*k、3*k、4*k …,一一筛去; 从当前下标k的下一个开始找到下一个仍在筛子中的数,并赋值给k; } 从2开始,将所有留在筛子中的数(即为质数)打印出来; 2)筛子的构造 为了表示一个筛子,并将给定范围N以内的数放入筛子中,可以定义一个一维数组 int prime[N+1]; 其中