该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
就是BITArray[ (i -3)/ CHAR_BIT ]其中i从0开始,那下标不就为负了?而指向的又是哪个数据?下面是完整代码。
#include
#include
#include
#include
#include
#include
#include
int main( )
{
unsigned char *BITArray;
long maxsize;
long i, j,n=10000;
int t,sqn,k=1;
//scanf( "%ld", &n);
t=clock();
maxsize = n / CHAR_BIT+(n%CHAR_BIT!=0);
BITArray = ( unsigned char * )malloc( maxsize * sizeof( unsigned char ) );
assert( NULL != BITArray );
for( i = 0;i< maxsize; ++i )
BITArray[ i ] = 0xff;
sqn=(int)(sqrt(n)+0.001);
for( i = 3; i<=sqn; i+=2)
if( BITArray[ (i -3)/ CHAR_BIT ] & ( 1 << (i -3)% CHAR_BIT ) )
{
++k;
for( j = i*i; j<=n;j+=i*2)
BITArray[( j -3)/ CHAR_BIT ] &= ~( 1 << (( j -3) % CHAR_BIT ) );
}
for( ;i<=n ;i+=2)
if( BITArray[ (i -3)/ CHAR_BIT ] & ( 1 <
++k;
free(BITArray);
printf("time:%d sum:%d\n",clock()-t,k);
return 0;