• 牛客网 PAT 算法历年真题 1003: 数素数 (20)


    1003:数素数 (20)

    时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)

    题目描述

    令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出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


    思路分析:

    这个题,判断素数大家都会,重点是在于这个算法是否会超时,以及输出格式的问题:

    素数判断:
    除了1和它本身,没有其他的因子,称为素数, 可以看成 循环变量从2到n-1,但是,如果数非常大的话,这就很头疼了,
    咱们来简化一下判断素数的方法,比如n=9时,因为9开根等于3,所以,判断到3就可以确定9不是素数,因此,循环变量i可以从2到根号下n,也就是【2-sqrt(n)】
    当一个数被确认是素数时,就要输出了,

    输出格式:

    题目要求,10个一换行
    那么咱就直接判断count(从2开始累加的素数的个数),分为3种情况:

    1.素数的位置小于题目要求的输出范围,即count<n,这时候,不输出,继续循环;
    2.素数的位置在题目要求的输出范围,首先行内输出素数,这时,素数后面的输出,又分为3种情况:
      ①输出的素数不是一行的第10个,即(count-m+1)%10!=0,
       例如题目给的测试用例,m=5,当count=5时,(count-m+1)%10=1,当count=13时,(count-m+1)%10=9,
       这个时候需要输出一个空格“ ”;
      ②输出的素数恰巧是一行的第10个,即(count-m+1)%10=0,
       例如,当count=14时,(count-m+1)%10 = 0 ,这个时候需要输出一个空行;
      ③数出的素数是要求输出的最后一个,即count=n,这个时候,直接结束程序即可;

    3.素数的位置大于题目要求的输出范围,其实,程序永远都走不到这一步,当输出的素数是要求输出的最后一个时,在第二种情况的第三点已经结束程序啦

    Java 代码如下:

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner sca = new Scanner(System.in);
            int m = sca.nextInt();
            int n = sca.nextInt();
            int count = 1;
            if(m == 1) {
                System.out.print(2);
                if(n == 1)
                    return;
                else
                    System.out.print(" ");
            }
            int i = 3;
            while(true){
                if(f(i)) {  //素数判断
                    count++; //素数数目+1
                    if(count >= m) { //素数的位置在题目要求的输出范围
                        System.out.print(i);// 行内输出素数
                        if(count==n){//数出的素数是要求输出的最后一个,结束程序
                            return;
                        }
                        if((count-m+1) % 10 != 0) {//①(count-m+1)%10!=0,输出空格“ ”
                            System.out.print(" ");
                        }else {                    //①(count-m+1)%10==0,输出空行
                            System.out.println();
                        }
                    }
                } 
                i+=2;
            }
        }
        //判断素数
        static boolean f(int x){
            for(int j = 2; j < Math.sqrt(x) + 1; j++) {
                if(x % j == 0) {
                    return false;
                } 
            }
            return true;
        }
    }
    
    
    
     
  • 相关阅读:
    EasyUI DataGrid undefined处理
    EasyUI Tabs
    EasyUI ComboBox ajax
    Spring Controller RequestMapping
    Spring前台填充数据
    关于Map集合的遍历总结
    mvc与三层结构终极区别
    关于cron4j的使用
    中国各个省市县的人口统计,echart展示
    windows 安装nodejs 和 npm
  • 原文地址:https://www.cnblogs.com/l199616j/p/10307179.html
Copyright © 2020-2023  润新知