用位数组计算质数
这道题貌似在很多地方都有出现,就我所记得的就有《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编辑过]