构造素数表
欲构造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循环一个一个的输出素数,但是那样没法把数据保存起来
用数组的话可以把数据保存在数组当中
用数组不好想,我认为有一定的技巧性
来源:https://www.cnblogs.com/panghushalu/p/11786099.html