/*筛法素数产生器 语法:result=prime(int a[],int n); 参数: a[]: 用于返回素数的数组 n: 产生n以内的素数,按升序放入a[]中 返回值: n以内素数的个数 注意: 其中W[],B[]已知,W[i]>0且W[i]与W[j]互质, 求a */ int prime ( int a[],int n ) { int i,j,k,x,num,*b; n++; n/=2; b= ( int * ) malloc ( sizeof ( int ) * ( n+1 ) *2 ); a[0]=2; a[1]=3; num=2; for ( i=1; i<=2*n; i++ ) b[i]=0; for ( i=3; i<=n; i+=3 ) for ( j=0; j<2; j++ ) { x=2* ( i+j )-1; while ( b[x]==0 ) { a[num++]=x; for ( k=x; k<=2*n; k+=x ) b[k]=1; } } return num; }