欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

筛法求素数c 语言,位筛法求素数,有段代码看不懂,有大佬可以来说一下

发布时间:2025/3/8 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 筛法求素数c 语言,位筛法求素数,有段代码看不懂,有大佬可以来说一下 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

就是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;

总结

以上是生活随笔为你收集整理的筛法求素数c 语言,位筛法求素数,有段代码看不懂,有大佬可以来说一下的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。