筛法求素数

筛法描述:

把 2 到 n 中所有的数列出来, 然后从 2 开始, 先划掉 n 内所有 2 的倍数, 然后每次从下一个剩下的数(必然是素数)开始,划掉其 n 内的所有倍数。最后剩下的数,就都是素数了。

思路:

  • 设置一个标志数组 is_prime, is_prime[i] 的值是 1 就表示 i 是素数,开始数组元素值全部为 1
  • 划掉 k 的倍数, 就是把 is_prime[2k], is_prime[3k] …… 标记为 0
  • 最后检查 is_prime 数组,如果is_prime[i] 值为 1 那么 i 就是素数

实现:

// 筛法求素数
#include 
#include 
using namespace std;

const int max_size = 1000;
// 大数组定义在外面
char is_prime[max_size+1]; // 最终如果 is_prime 为 1,则表示 i 是素数

int main(void)
{
    int i, j;
    for (i=2; i

筛法是一种一空间换取时间的方法。

你可能感兴趣的:(筛法求素数)