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

原创 2013年12月04日 14:41:42



题目


解决代码及点评

/************************************************************************/
/* 
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语言竞赛题之0804成绩筛选

题目解决代码及点评/************************************************************************/ /* 4、 4. 编写一个程序...
  • yincheng01
  • yincheng01
  • 2013年12月06日 14:59
  • 1669

基于visual Studio2013解决C语言竞赛题之0408素数

题目解决代码及点评 /************************************************************************/ /* 8.判断一个数是否是素...
  • yincheng01
  • yincheng01
  • 2013年12月02日 23:09
  • 1505

基于visual Studio2013解决C语言竞赛题之1056素数序列

题目解决代码及点评/* 56. 编程序求3至39之间满足下列条件的各组素数:每组有3个素数,第2个比第一个大2,第3个比第2个大4。例如 5,7,11就是满足条件的一组。 要求:1) 不许使用数组。 ...
  • yincheng01
  • yincheng01
  • 2013年12月09日 23:31
  • 1625

基于visual Studio2013解决C语言竞赛题之0603打印素数

题目解决代码及点评/* 功能:打印出3到1100之间的全部素数(判素数由函数实现 */ #include #include #include int judgPri(int); //判断...
  • yincheng01
  • yincheng01
  • 2013年12月05日 14:29
  • 1529

基于visual Studio2013解决C语言竞赛题之1085相邻之和素数

题目解决代码及点评/************************************************************************/ /* 85. 相邻数之和为素数。...
  • yincheng01
  • yincheng01
  • 2013年12月10日 14:24
  • 1570

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

题目解决代码及点评/************************************************************************/ /* 1.有一个正整数数组,包...
  • yincheng01
  • yincheng01
  • 2013年12月04日 12:05
  • 1542

基于visual Studio2013解决C语言竞赛题之0611素数排序

题目解决代码及点评#include #include #include /* 判断整数n是否为质数 是:返回1 否:返回0 */ int isPrimeNum1(int n) { int...
  • yincheng01
  • yincheng01
  • 2013年12月06日 10:53
  • 1540

基于visual Studio2013解决C语言竞赛题之0601判断素数函数

题目解决代码及点评//编写一函数判断一个数是否为素数 #include #include #include void f61(int a ) {  if (a==0)  {   printf("%...
  • yincheng01
  • yincheng01
  • 2013年12月05日 13:51
  • 1789

基于visual Studio2013解决C语言竞赛题之0409 100以内素数

题目解决代码及点评/************************************************************************/ /* 9. 打印1-100之间...
  • yincheng01
  • yincheng01
  • 2013年12月03日 13:19
  • 1685

基于visual Studio2013解决C语言竞赛题之0605strcat

题目解决代码及点评/* 5. 写一函数,将两个字符串连接,即编写一strcat函数。 */ #include #include void stract(char *p1,char *p2...
  • yincheng01
  • yincheng01
  • 2013年12月05日 14:49
  • 1719
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于visual Studio2013解决C语言竞赛题之0507筛选素数
举报原因:
原因补充:

(最多只允许输入30个字)