这道程序什么意思啊!救命!!!
小弟因为想过高程,所以暑假一直在复习,遇到一道程序,百思不得其解,希望各位高手可以帮帮我,写个注释!!!求求你了!!!
本程序采用筛选法求质数,程序用一个无符号整数数组代表筛,它的每一位对应一个整数。因除2以外,其余所有的质数都是奇数。约定数组按位的顺序,集资对应整数,5,7,9,11…
程序首先将数组所能容纳的上述奇数放入筛中,即将数组的全部位都置成1。
从筛中找出最小的数,该数即为质数,然后将该质数的倍数从筛中去掉,即将在数组中与
它们对应的位置成0。因偶数不在筛中,去掉的数是找到的质数的1倍,3倍,5倍,…整数。反复上述过程,直至筛为空。程序就能求得指定范围内的全部质数。
#include <stdio.h>
#define N 50
#define LN 16
main()
{
unsigned int sieve[N],prime[N];
unsigned int j,w,p,c;
for (j=0; j<N; j++)
{ sieve[j]=0xFFFFFFFF;
prime[j]=0x00;
}
w=0;
j=0;
do
{ while (((0x01 << (j++)) & sieve[w])==0x00);
p=w*LN + j-1;
c=2*(p+1)+1;
prime[w] |= (0x01 << (j-1));
do
{ sieve[p/LN] &= (~(0x01 << p%LN));
w++;
j=0;
}while (p < N*LN-LN);
while ((sieve(w] == 0x00) && (w < N-1))
{ w++;
j=0;
}
}while (sieve[w]);
printf("%5d",2);
for (w=0; w<N; w++)
{ for (j=0; j<LN; j++)
{ if((0x01<<j) & prime[w])
printf("%5d", 2*(w*LN+j+1)+1);
}
printf("\n");
}