【代码模板】求质数(素数)

 

试除法

bool is_prime(int x)
{
    if (x < 2) return false;
    for (int i = 2; i * i <= x; i++ )
        if (x % i == 0)
            return false;
    return true;
}

 

筛法

const int MAXV = 10000; //素数表范围
bool flag[MAXV+1]; //标志一个数是否为素数
int prime[MAXV+1]; //素数表,下标从0开始
int size; //素数个数
void genPrime(int max)
{
    memset(flag, true, sizeof(flag));
    for(int i = 2; i <= max / 2; i++)
    {
        if(flag[i])
        {
            for(int j = i << 1 ; j <= max; j += i)
            {
                flag[j] = false;
            }
        }
    }
    for(int i = 2 ; i <= max; i++)
    {
        if(flag[i])
        {
            prime[size++] = i;
        }
    }
}

 

posted on 2021-12-10 09:40  张老师教编程  阅读(237)  评论(0)    收藏  举报

导航