数素数
题目要求:
令 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
解题思路:
从小到大找素数,输出第m到第n个素数,边找边判断边输出,不需要存储到数组中
注意:
- 是第M到第N个素数,而不是M到N之间的素数
- 第M到第N个素数,不能从1到10000中检索素数,因为最大是序号为10000的素数,而不是10000以内的最大素数,因此for循环中不能写终止条件
完整程序:
#include <stdio.h>
#include <math.h>
#define TRUE 1
#define FALSE 0
// 思路:从小到大找正整数中的素数,输出第m到第n个素数
// [注意]是第M到第N个素数,不能从1到10000中检索素数,因为最大是10000个素数,因此for循环中不能写终止条件
// 判断素数函数(判断任意正整数)
int isPrime(int n)
{
if(n == 1)
return FALSE;
if(n == 2)
return TRUE;
else
{
for(int i = 2; i <= sqrt(n); i += 1)
if(n % i == 0)
return FALSE;
return TRUE;
}
}
int main()
{
int count = 0;//记录素数个数
int M, N;//第M和第N个素数
int printNum = 0;//记录输出了几个数,每十个一换行
scanf("%d %d",&M,&N);
for(int i = 2; ; i++)//因为1不是素数,所以从2开始即可
{
if(isPrime(i))//该数是素数
{
count ++;
if(count >= M && count <= N)
{
printf("%d", i);
printNum ++;
if(printNum % 10 != 0 && count != N)
printf(" ");
else
printf("\n");
}
}
if(count == N)
break;
}
return 0;
}