//思想:通过标志位来减少素数判断的次数。。因为素数不可能有约数,而且通过移位操作快速的具体数的标志位。。。 const int MAXN = 100; int flag[MAXN /32+ 1]; int primes[MAXN / 3 + 1], pi; void GetPrime_1() { int i, j; pi = 0; memset(flag, 0, sizeof(flag)); for (i = 2; i < MAXN; i++) if (!((flag[i/32] >> (i % 32)) & 1)) { primes[pi++] = i; for (j = i; j < MAXN; j += i) flag[j/32] |= (1 << (j % 32)); } } void PrintfArray() { for (int i = 0; i < pi; i++) printf("%d ", primes[i]); putchar('\n'); } int main() { GetPrime_1(); PrintfArray(); return 0; }