题目描述
令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出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
//1003 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
#include<stdio.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int i=0,j=2,k=0,l=0,count1=0,count2=0;
k=n-m+1; //k:需要输出的质数的个数
int b[k];
while(1)
{
i++;
for(j=2;j<(i/2);j++)//类似与折半查找,只要在[2,i/2)中找到一个因数,那么i就不是质数
{
if(i%j==0) //i%j==0表明i不是素数
{
break;
}
}
if(i==2||j==(i/2))
{
count1++;//质数的个数
if((count1==m||count1>m)&&(count1==n||count1<n))
{
//将给出范围内的质数保存到数组中
b[l]=i;
l++;
}
if(count1==n)
{
break;
}
}
}
for(i=0;i<k;i++)
{
if(i%10<9&&i!=k-1)
{
printf("%d ",b[i]);
}
if(i%10==9&&i!=k-1)
{
printf("%d\n",b[i]);
}
if(i==k-1)
{
printf("%d",b[i]);
}
}
return 0;
}