如何构造素数表
构造素数表
欲构造n以内不含n的素数表
1.开辟prime[n],初始化其所有元素为1,prime[x]为1表示x是素数
2.令x等于2
3.如果x是素数,则对于(i=2;xi<n;i=i+1)令prime[ix]=0
4.令x=x+1,如果x<n,重复3,否则结束
# include <stdio.h>
int main()
{
const int maxnumber=25; /*const定义常量,但是这样的话就没法从下面用scanf_s输入改变的maxnumber*/
int i, x;
int isprime[maxnumber]; /*只能用const定义,否则[]就会出现error,所以很矛盾*/
for (i = 0; i < maxnumber; i = i + 1)
{
isprime[i] = 1; /*将所有的都变成1*/
}
for (x = 2; x < maxnumber; x = x + 1) /*把2i去掉,把3i去掉,把4i去掉...........把ni去掉*/
{
if (isprime[x]) /*其实有没有这个if都行,这个减少了for循环的次数,优化了程序 不过确实大大的减少了程序运行的次数,尤其是数越大越明显*/
{
for (i = 2; i *x< maxnumber; i = i + 1)
{
isprime[i * x] = 0; /*变成0以后以助于后面的判断*/
}
}
}
for (i = 1; i < maxnumber; i = i + 1)
{
if (isprime[i]) /*如果判断不是0,就可以输出*/
printf("%d\t",i);
}
printf("\n");
}
构建一个素数表
可以有另一种方法就是直接用是scanf_s加上for循环一个一个的输出素数,但是那样没法把数据保存起来
用数组的话可以把数据保存在数组当中
用数组不好想,我认为有一定的技巧性