用位数组计算质数
这道题貌似在很多地方都有出现,就我所记得的就有《C和指针》、《算法》。效果还不错。
1亿以内的质数,不到1分钟得出结果,只是存储结果的文本文档有60.6M,让人完全没有打开的欲望。
额外吐槽一句:《算法》中的代码风格简直糟糕透顶,对比起来《数据结构与算法分析》的代码风格简直业界良心。
程序代码:#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
int
main( void )
{
unsigned char *BITArray;
long maxsize;
long i, j, k;
scanf( "%ld", &maxsize );
maxsize = maxsize / CHAR_BIT;
BITArray = ( unsigned char * )malloc( maxsize * sizeof( unsigned char ) );
assert( NULL != BITArray );
for( i = 0; maxsize > i; ++i )
BITArray[ i ] |= 0xAA;
BITArray[ 0 ] = 0xAC;
for( i = 3; maxsize * CHAR_BIT > i * i; ++i )
if( BITArray[ i / CHAR_BIT ] & ( 1 << i % CHAR_BIT ) )
for( j = 2; maxsize * CHAR_BIT > ( k = j * i ); ++j )
BITArray[ k / CHAR_BIT ] &= ~( 1 << ( k % CHAR_BIT ) );
for( i = 2,j = 0; maxsize * CHAR_BIT > i; ++i )
if( BITArray[ i / CHAR_BIT ] & ( 1 << i % CHAR_BIT ) )
/*printf("%10ld%c",i, (j + 1) % 8 ? ' ' : '\n'), */++j;
printf( "\n%ld\n", j );
return 0;
}
[此贴子已经被作者于2017-4-7 01:36编辑过]









