题目链接:https://www.nowcoder.com/pat/6/problem/4079
前言:这题我写的很迷,做了快一个小时,稀里糊涂地通过了,那个判断素数的函数怎么写都写不对,超级丧
题目要点: 1. 没有什么特别的,就是一个素数一个素数的数(三声)数(四声),数到第M个的时候开始输出,到第N个的时候结束,然后在输出形式的时候做一些变化。很简单是吧?可为毛我做不出来。。。
2. m n 就不用说了,就是题干中的M N 。
3. IsPrime() 是判断素数的函数,返回1表示是素数,返回0表示不是。而且 可以用 i<=x/2或i<=sqrt(x);直接用i<x,会报超时的。
4. p 表示是第几个的素数,与m比较,判断何时开始输出。
5. count 表示输出了几个数,每输出了十个(count%10==0),就输出一个回车,否则就输出一个空格。
6. i 是数,按2 3 4 5 6 ……的顺序变化。为什么要从2开始判断素数呢?因为我的IsPrime()中没有做x=1的判断,哈哈哈,我好懒。
7. 行末没有多余的空格,我直接在循环里将最后一个数单独拿出来输出,又是在偷懒,哈哈哈。
8. 循环里有很多括号,还是要注意下的。
下面是完整代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
int
IsPrime(
int
x) {
int
ret =
1
;
int
i;
for
(i =
2
; i <= sqrt(x); i++) {
if
(x%i ==
0
) {
ret =
0
;
break
;
}
}
return
ret;
}
int
main() {
int
m, n;
scanf(
"%d %d"
, &m, &n);
int
p =
0
;
int
count =
0
;
int
i;
for
(i =
2
; p < n;i++) {
if
(IsPrime(i) ==
1
) {
p++;
if
(p >= m&&p != n) {
printf(
"%d"
, i);
count++;
if
(count %
10
==
0
)
printf(
"\n"
);
else
printf(
" "
);
}
else
if
(p == n)
printf(
"%d"
, i);
}
}
return
0
;
}
(~ ̄▽ ̄)~
测试点
测试点 | 结果 | 用时(ms) | 内存(KB) |
---|---|---|---|
1 | 答案正确 | 3 | 384 |
2 | 答案正确 | 3 | 380 |
3 | 答案正确 | 30 | 384 |
4 | 答案正确 | 3 | 264 |
5 | 答案正确 | 3 | 384 |
6 | 答案正确 | 3 | 376 |
7 | 答案正确 | 3 | 384 |