PAT乙级:1013 数素数 (20 分)(Java)

青旅半醒 2022-10-16 07:53 253阅读 0赞

PAT乙级:1013 数素数 (20 分)(Java)

微信公众号请搜索:【Codeplus】

作者 CHEN, Yue
单位 浙江大学
代码长度限制 16 KB
时间限制 200 ms
内存限制 64 MB

题目描述:

在这里插入图片描述

题解思路:

首先定义一个判定素数的方法isPrime(int i),具体判定素数的过程这里不解释了,前面也遇到过几次。然后在for (int i = 2; ; i++)循环里面进行判定,如果是素数,素数计数器自增,再判定,如果素数个数在M-N之间则按要求输出,第一个输出的素数,不带空格,输完第一个更改空格标记符,从第二个输出的素数开始前面带空格输出,如果输出个数达到10个,进行换行操作,最后素数个数大于N,结束。

提交代码:

  1. import java.util.Scanner;
  2. /**
  3. * 1013 数素数 (20 分)
  4. *
  5. * @author LiFeilin
  6. * @date 2021/5/28 8:52
  7. */
  8. public class Test13 {
  9. public static boolean isPrime(int i) {
  10. //判定一个数是否为素数
  11. if (i == 1) {
  12. return false;
  13. }
  14. if (i % 2 == 0 && i != 2) {
  15. return false;
  16. }
  17. for (int j = 3; j <= Math.sqrt(i); j += 2) {
  18. //用到了sqrt()来快速查找素数。通过对目标开根号,减少计算次数
  19. if (i % j == 0) {
  20. return false;
  21. }
  22. }
  23. return true;
  24. }
  25. public static void main(String[] args) {
  26. Scanner scanner = new Scanner(System.in);
  27. int M = scanner.nextInt(); //开始位置参数
  28. int N = scanner.nextInt(); //结束位置参数
  29. int count = 0; //统计输出格式一行是否满10个
  30. int count1 = 0; //统计素数的个数
  31. int flag = 0; //空格输出标记
  32. for (int i = 2; ; i++) {
  33. //从第二个数开始判定是否是素数
  34. if (isPrime(i)) {
  35. //调用判定素数方法
  36. count1++; //素数个数自增
  37. if (count1 >= M && count1 <= N) {
  38. //如果素数个数在M-N之间则按要求输出
  39. if (flag == 0) {
  40. System.out.print(i); //第一个输出的素数,不带空格
  41. flag = 1; //重置空格标记
  42. count++;
  43. } else {
  44. System.out.print(" " + i); //从第二个输出的素数开始前面带空格输出
  45. count++;
  46. if (count == 10) {
  47. //如果输出个数达到10个,进行换行操作
  48. System.out.print("\n");
  49. count = 0;
  50. flag = 0;
  51. }
  52. }
  53. }
  54. if (count1 > N) break; //素数个数大于N,结束
  55. }
  56. }
  57. }
  58. }

提交结果:

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,253人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PAT 1013 素数

    令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。 输入格式: 输入在一行中给出M和N,其间以空格分隔。 输出格式: 输出从

    相关 1013. 素数 (20)

    令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。 输入格式: 输入在一行中给出M和N,其间以空格分隔。 输出格式: 输出从

    相关 1013 素数 (20 )

    令 P​i​​ 表示第 i 个素数。现任给两个正整数 M≤N≤10​4​​,请输出 P​M​​ 到 P​N​​ 的所有素数。 输入格式: 输入在一行中给出 M 和 N,