这是打素数表最快的一种方法,叫线性筛,比普通的筛法虽然快不了多少,但是对于那种超大的恐怖数据还是很有用的。
#include <cstring>
using namespace std;
int prime[MAX], primesize;
bool isprime[MAX];
void getlist(int listsize)
{
memset(isprime, 1, sizeof(isprime));
isprime[1] = false;
for (int i = 2; i <= listsize; i++)
{
if (isprime[i])prime[++primesize] = i;
for (int j = 1; j <= primesize&&i*prime[j] <= listsize; j++)
{
isprime[i*prime[j]] = false;
if (i%prime[j] == 0)break;
}
}
}
函数getlist里面的参数是你要打的素数表的范围,调用该函数后,prime数组里即是该素数表。