素数筛的思想很是简单,就是素数的倍数都是合数。所以打表就好,找到素数,然后把他的倍数都打成合数。余下的就是真正的素数啦。(注意1不是素数)
#define MAX 10000 //求1-9999的素数
int i,j;
bool num[MAX];
memset(num, 1, sizeof(num));
//先全部弄成素数,注意只有bool才能初始化1即初始化为true,int等数字只能初始化为0或-1
num[1] = 0;
for (i = 2;i < MAX;i++)
{
if (num[i] == 1)
for (j=2;j*i<MAX;j++)
num[i*j] = 0;
}
就是最后num的bool组,1和0不为素数
当然这个很复杂,我们就要进行优化
#define MAX 10000
int i,j,ans=0;
int num[MAX];
int su[MAX];
memset(num, 1, sizeof(num));
num[1] = 0;
num[0] = 0;
for (i = 2;i < MAX;i++)
{
if (num[i] == 1)
{
su[ans] = i;
ans++;
}
for (j = 1;j < ans&&su[j]*i<MAX;j++)
num[su[j]*i] = 0;
}
注意j和i有的时候要配合成long long,su数组要成为long long型。