打印素数表orz

记笔记记笔记

#include <stdio.h>
#include <math.h>
char table[10000003] = {0};
void print_table(int h)
{
 int m = sqrt(h + 0.5);
 for (int i = 4;i <= h;i += 2)
  table[i] = 1;//1表示该数为合数
 for (int i = 3;i <= m;i += 2)
 {
  if (table[i] == 0)
  {
   for (int j = i*i;j <= h;j += i)//上面截图从j=i+i开始,事实上没必要,因为     k*i(k=2,3,4.....i-1)   已在之前被和谐了
    table[j] = 1;
  }
 }
}

//下面的代码应该将ISPRIME[]全部初始化为1.

#include <stdio.h>
#include <string.h>
#define MAXN 1000003
#define MAXL 10000003
int prime[MAXN];
char check[MAXL];

int main()
{
 int n, count;
 while (~scanf("%d", &n))
 {
  memset(check, 0, sizeof(check));
  count = 0;
  for (int i = 2;i <= n;i++)
  {
   if (!check[i])
    prime[count++] = i;
   for (int j = 0;j < count;j++)
   {
    if (i*prime[j] > MAXL)break;
    check[i*prime[j]] = 1;
    if ((i%prime[j]) == 0)break;
   }
  }

  printf("ok ");
  for (int i = 2;i <= 100;i++)
   if (!check[i])printf("%d", i);
 }
 
 return 0;
}

原文地址:https://www.cnblogs.com/schsb/p/7828469.html