筛选法找素数模板

const int MAX = 1000010;

bool prime[MAX];

//这是最朴素的筛选法,缺陷是会重复筛同一个数

void isPrime()

{

    memset(prime, 1, sizeof(prime));

    prime[0] = prime[1] = 0;

    for(int i = 4; i <= MAX; i += 2)

        prime[i] = 0;

    for(int i = 3; i <= sqrt(MAX); i++)

    {

        if(prime[i])

        {

            for(int j = i+i; j <= MAX; j += i)

                prime[j] = 0;

        }

    }

}





//这是改进后的算法,避免重复筛同一个数,经测试效率提高很多

void isPrime()

{

    memset(prime, 1, sizeof(prime));

    prime[0] = prime[1] = 0;

    for(int i = 4; i <= MAX; i += 2)

        prime[i] = 0;

    for(int i = 3; i <= sqrt(MAX); i++)

    {

        if(prime[i])

        {

            for(int j = i*i; j <= MAX; j += i+i)

                prime[j] = 0;

        }

    }

}

 

你可能感兴趣的:(模板)