基于visual Studio2013解决C语言竞赛题之0507筛选素数




题目


解决代码及点评

/************************************************************************/
/* 
7.	用筛选法求 2到 100之间的素数。
方法如下:首先 2是素数,凡 2 的倍数都不是素数,于是把这些数从数表中筛去, 
2以后没有被筛去的第一个数是 3, 然后把 3的倍数都从数表中筛去, 3以后没被筛去的第一个数是 5
,然后把 5 的倍数都从数表中筛去。如此下去,直到遇到某数 K(≤ N),其后没有数可筛选为止, 
这时保留下的未被筛去的数就是 2到 N的素数。
*/
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>



void main()
{
	const int N=101;
	int Sn=(int)sqrt(double(N-1)); // 筛选法只要筛选到sqrt(N-1)
	int arr[N]; // N个标记,如果arr[k] = 1表示k是素数
	for (int i=0;i<N;i++)
	{
		arr[i]=1; // 初始化时认为全是素数
	}
	arr[0]=arr[1]=0; // 0和1认为不是素数
	for (int j=2;j<Sn;j++) // 从2开始循环
	{       // 如果j对应的值是0,那么j是合数,则找下一个
		while (arr[j]==0)//循环取得数字
		{
			j++;
		}
		for (int i=j+j;i<N;i=i+j)//找到某个素数之后,把它倍数下标对应的值改成0,表示合数
		{

			arr[i]=0;

		}
	}
	for (int i=2;i<N;i++) // 输出下标为1的素数
	{
		if (arr[i]==1)
		{
			printf("%5d",i);
		}
	}


	system("pause");
}


代码下载及其运行

代码下载链接:

http://download.csdn.net/detail/yincheng01/6653779

解压密码为c.itcast.cn


下载解压后用VS2013打开工程文件

点击 “本地Windows调试器” 执行


程序运行结果






你可能感兴趣的:(基于visual Studio2013解决C语言竞赛题之0507筛选素数)