//第 1 步过后 4 6 8... 这15个单元被标成false, 其余为true。
//第 2 步开始:
//i = 3; 由于prime[3] = true, 把prime[6], [9], [12], [15], [18], [21], [24], [27], [30]标为false.
//i = 4; 由于prime[4] = false, 跳过。
//i = 5; 由于prime[5] = true, 把prime[10], [15], [20], [25], [30]标为false.
//i = ... > sqrt(LENGTH)算法结束。
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int LENGTH = 100000;
bool prime[LENGTH];
int main()
{
memset(prime, false, LENGTH);//全部置 0;
prime[2] = true;//偶数2为素数;
for (int i = 3; i < LENGTH;i+=2)//奇数都设置为true;
prime[i] = true;
for (int i = 3; i <=sqrt(LENGTH);i++)//一个合数的最大质因子不大于它的平方根
{
int j;
if (prime[i])
{
for (j = 2*i; j < LENGTH; j += i)
prime[j] = false;
}
}
//输出值为true的下标
for (int i = 2; i < LENGTH; i++)
{
if (prime[i])
cout << i << " ";
}
return 0;
}
高效率的素数判断方法
最新推荐文章于 2021-11-13 12:56:57 发布