令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM 到 PN 的所有素数。
输入格式:
输入在一行中给出 M 和 N,其间以空格分隔。
输出格式:
输出从 PM 到 PN 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。
输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
思路:求出范围内素数,按照要求输出即可
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
const int N = 1000001;
bool PRIME[N]={0};//素数表
int PrimeTable[10001];//这里的10001是1 - 10001里面的素数的最大个数
void getPrimetable()//求素数
{
for(int i=3;i<=3333;i+=2)
{
if (PRIME[i]==0)
{
for(int j=i*i;j<N;j+=2*i)//检查9,15(3*5),21(3*7)。。。。奇数乘以偶数得到一偶数,所以这里j+=2*i
{
PRIME[j]=1;//不和要求,不是素数
}
}
}
int total_prime=1;//考虑2是素数
PrimeTable[1]=2;
for (int i=3;i<N;i++)
{
if (i%2 != 0 && PRIME[i]==0)//这里排除掉所有的偶数
{
PrimeTable[++total_prime]=i;
}
}
}
int main( )
{
int i,j=1,m,n;
getPrimetable();
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
printf("%d",PrimeTable[i]);
if(j%10==0)
printf("\n");//10个一行
else if(i!=n)
printf(" ");//末尾没有空格
j++;
}
return 0;
}