令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM 到 PN 的所有素数。
注意是第m个素数到n个素数,而不是md到m之间的素数
输入格式:
输入在一行中给出 M 和 N,其间以空格分隔。
5 27
输出格式:
输出从 PM 到 PN 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。
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 isPrime(int a)
{
int flag=1;
if(a==1)
{
return 0;
}
for(int j=2;j<=sqrt(a);j++)
{
if(a%j==0)
{
flag=0;
break;
}
}
return flag;
}
//把第M个到第N个之间的素数放入prime集合中
int prime(int *prime,int m,int n)
{
int temp=1,count=0;
//找到第M个质数
while(1)
{
temp++;
if(isPrime(temp))
{
count++;
}
if(count==m)
{
break;
}
}
count=0;
//保存第m个到第n个质数
while(1)
{
if(isPrime(temp))
{
prime[count++]=temp;
// printf("%d\n",temp);
}
if(count>=n-m+1)
{
break;
}
temp++;
}
//printf("%d\n",count);
return count;
}
//打印质数
void prinfPrime(int *prime,int len)
{
int k=1;
for(int i=0;i<len;i++)
{
if(k%10!=0&&k!=len)
{
printf("%d ",prime[i]);
}
else if(k==len)
{
printf("%d",prime[i]);
}else
{
printf("%d\n",prime[i]);
}
k++;
}
}
int main()
{
int m,n,len;
scanf("%d %d",&m,&n);
int prim[10000];
len=prime(prim,m,n);
prinfPrime(prim,len);
return 0;
}