记笔记记笔记
#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;
}