一【题目难度】
二【题目编号】
三【题目描述】
- 令
P
i
P_i
Pi?? 表示第
i
i
i 个素数。现任给两个正整数
M
≤
N
≤
1
0
4
M≤N≤10^4
M≤N≤104 ,请输出
P
M
P_M
PM?? 到
P
N
P_N
PN?? 的所有素数。
四【题目示例】
-
输入格式: 输入在一行中给出
M
M
M 和
N
N
N,其间以空格分隔。 -
输出格式: 输出从
P
M
P_M
PM?? 到
P
N
P_N
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
五【解题思路】
- 因为题目要求输出某个范围内的素数,暴力的方法肯定好想,就是把整个范围内的所有素数都存储到数组中,然后再按照要求的范围输出,但是这样多了很多不必要的步骤。我们可以直接从2开始遍历,设置记录已经判断出的素数的个数,如果素数的个数到了m这个数,就开始输出,到n这个数停止。里面需要注意换行和空格的问题。素数的筛选方法使用的是1007 素数对猜想的方法
六【最终得分】
七【代码实现】
#include<stdio.h>
#include<math.h>
#include<stdbool.h>
bool isPrimeNumber(int x)
{
int sqr = (int)sqrt(1.0 * x);
for(int i = 2;i<=sqr;i++)
{
if(x % i == 0)
{
return false;
}
}
return true;
}
int main()
{
int m,n,count = 0,num = 2,index = 0;
scanf("%d %d",&m,&n);
while(count < n)
{
if(isPrimeNumber(num))
{
count++;
if(count >= m)
{
index++;
printf("%d",num);
if(index % 10 == 0)
{
printf("\n");
}
else if(count < n)
{
printf(" ");
}
}
}
num++;
}
return 0;
}
八【提交结果】
|