如何构造素数表

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

posted @ 2019-11-03 14:15  panghushalu  阅读(436)  评论(0编辑  收藏  举报