令 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 <stdio.h>
#include <math.h>
int main()
{
int m,n,flag=0,num=1,outnum=0;scanf("%d %d",&m,&n);
if (m==1) //把第一个素数2单独弄出来 省时间
{
outnum++;
printf("2");
if (m!=n) //最后1个测试点只输出2
printf(" ");
}
for (int i=3;num<n;i+=2) //num为找到的第几个素数 小于n是一直循环
{
flag=0; //判断是否为素数标志
for (int j=3;j<=sqrt(i);j+=2) //没有sqrt会超时 有一个测试点n==10000
{
if (i%j==0)
{
flag=1;
break;
}
}
if (!flag)
{
num++; //素数个数加1
if (num>=m) //从m个素数开始输出
{
if(++outnum%10==0 || num==n) //输出个数为10的倍数和最后一个没有空格
printf("%d\n",i);
else
printf("%d ",i);
}
}
}
}