以下是引用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;
}