以下是引用renkejun1942在2017-4-6 09:56:32的发言:
对啦,帮我把帖子下沉一下了。程序有错,免得祸害别人。
对啦,帮我把帖子下沉一下了。程序有错,免得祸害别人。
错不怕,改了就是。
编程不停,改错继续。
#include <stdio.h> #include <stdlib.h> #include <assert.h> #include <time.h> #define BIT ( sizeof( unsigned char ) * 8 ) int main( void ) { unsigned char *BitArray; long maxsize; long i, j,t; //scanf( "%ld", &maxsize ); maxsize=100000000; t=clock(); maxsize = maxsize / BIT; BitArray = ( unsigned char * )malloc( maxsize * sizeof( unsigned char ) ); assert( NULL != BitArray ); for( i = 0; maxsize > i; ++i ) BitArray[ i ] |= 0xaa; BitArray[0]=172; //0xFF改成0xAA避开偶数部分,偶数不可能是质数 for( i = 3; maxsize * BIT >= i*i; i+=2 ) //质数从3开始,每次+2,则避开了偶数的检测,另只需要判断i*i<=maxsize * BIT,即可筛掉所有合数 if( BitArray[ i / BIT ] & ( 1 << i % BIT ) ) for( j = i+i; maxsize * BIT > j ; j+=i ) BitArray[ j / BIT ] &= ~(1 << ( j % BIT )); for( i = 3,j = 1; maxsize * BIT > i; i+=2 ) if( BitArray[ i / BIT ] & ( 1 << i % BIT ) )++j;; //printf("%10ld%c",i, (j + 1) % 8 ? ' ' : '\n'), ++j; printf("time:%d sum:%d\n",clock()-t,j); return 0; }