如何构造素数表

构造素数表
欲构造n以内不含n的素数表
1.开辟prime[n],初始化其所有元素为1,prime[x]为1表示x是素数
2.令x等于2
3.如果x是素数,则对于(i=2;x*i<n;i=i+1)令prime[i*x]=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循环一个一个的输出素数,但是那样没法把数据保存起来
用数组的话可以把数据保存在数组当中
用数组不好想,我认为有一定的技巧性

猜你喜欢

转载自www.cnblogs.com/panghushalu/p/11786099.html