原题: https://www.patest.cn/contests/pat-b-practise/1013
实现思路: 实现构建一个1万空间的数组, 里面存放前1万个素数, 之后正常输出即可.
核心还是, 怎么判断一个数是不是素数.
完整实现:
#include <stdio.h>
#define MAXSIZE 10001
int isPrime (int n);
/*
input:
5 27
output:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
*/
int main () {
int m;
int n;
int prime[MAXSIZE]; // 1-10000共保存1万个素数, 下标0不用
int i = 2;
int j = 1;
int split = 10; // 每10个字符打印一个换行
char ch = ' '; // 打印控制字符
scanf("%d", &m);
scanf("%d", &n);
while (i) {
if (isPrime(i) == 1) {
prime[j] = i;
j++;
}
if (j == MAXSIZE) {
// 1万个素数, 准备完毕
break;
}
i++;
}
j = 0; // 现在j用来, 打印控制
for (i=m; i<=n; i++) {
j++;
if (j % split == 0) {
ch = '
';
} else {
ch = ' ';
}
// 最后一个数也是
if (i == n) {
ch = '
';
}
printf("%d%c", prime[i], ch);
}
return 0;
}
// 是返回1, 不是返回0
int isPrime (int n) {
int i = 2;
int flag = 1;
while (i * i <= n) {
if (n % i ==0 ) {
flag = 0;
break;
}
i++;
}
return flag;
}