首页
社区
课程
招聘
梵听版質數產生器--Improved by Loka
2009-5-20 18:48 6803

梵听版質數產生器--Improved by Loka

2009-5-20 18:48
6803
这样换会好一点
#include <stdio.h>
#include <math.h>

#define NUM 50000000
typedef unsigned char BYTE;
BYTE table[((NUM+1)>>3)+1];

void suShu()
{
	int halfNum = (int)sqrt(1.0*NUM);//因数最大值

	for( int k=2; k<=halfNum; k++ )
	{
		if ((table[k>>3]&(1<<(k&7))) == 0)
		{
			for( int j=k*k; j<=NUM; j+=k)
			{
				table[j>>3] |= 1<<(j&7);//若为合数,数值变为1
			}
		}
	}

	for( int l=2; l<=NUM; l++)
	{
		if ((table[l>>3]&(1<<(l&7))) == 0)
		{
			printf("%10d", l);
		}
	}
	printf("\n");
}

int main()
{
	suShu();

	return 0;
} 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
点赞7
打赏
分享
最新回复 (3)
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cutcut 2009-8-5 10:37
2
0
原理是什么?
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kldaft 2009-8-5 11:03
3
0
除到没有因数为止,最后一个因数是被除数的平方根
雪    币: 67
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
没有姓名 2010-1-11 12:17
4
0
这样的代码可读性太差了。最好有些注释,谢谢。
游客
登录 | 注册 方可回帖
返回