#include <stdio.h>
#define MAXNUM 1e6 /*上限*/
int prime[1000000+5] = { 1,1 }; /*已知 0和 1不是素数*/
int count[1000000+5] = { 0 }; /*打表*/
int main()
{
/*速筛, 原理 一个判断一个素数,只需要判断能否被比他小的素数整除
因此,已知素数的倍数都是合数*/
int i, j;
for( i=2; i <= MAXNUM / 2; i++ ){
if( prime[i] ) /*素数标记为0,合数标记为1*/
continue;
else
for( j = i+i; j <= MAXNUM; j += i )
prime[j] = 1;
}
/*打表主程序*/
for( i=2; i <= MAXNUM; i++ ){
if( prime[i] )
count[i] = count[i-1];
else
count[i] = count[i-1] + 1;
}
int left, right;
scanf("%d%d", &left, &right ); /*输入范围*/
for( i=left; i <= right; i++ ){
if( !prime[i] )
printf("%d ", i );
}
printf("\n总计%d个素数\n", count[right] - count[left-1] );
return 0;
}