1013. 数素数 (20)

来源:互联网 发布:永久免费php空间 编辑:程序博客网 时间:2024/05/16 14:17


令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

import java.util.*;public class Main { //判断素数static boolean isPrime (int num) {for(int i=2; i<=Math.sqrt(num); ++i) {if(num % i == 0)return false;}return true;}public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt(), m = in.nextInt();int num=2, cnt1 = 0,cnt2=0;//cnt1用来记录总的素数的个数,cnt2用来记录要打印的素数的个数        while(true){        if(isPrime(num)){        cnt1++;        if(cnt1>=n&&cnt1<m){        cnt2++;        if(cnt2%10==0){        System.out.print(num);            System.out.println();}        else        System.out.print(num+" ");         }        if(cnt1==m){    System.out.print(num);        System.out.println();        break;            }                }        num++;        }}} 


反思:解决此题时,可能会因为思考第一万个素数大概有多大呢,第一反应可能是求出一个素数的数组,然后输出相应的元素,但是此方法过于暴力,再来看一下,解题的突破点在于个数,所以我们只需要一个循环并且设置跳出条件为个数临界值即可,同时需要记录当前满足条件的素数个数来实现打印的要求!

其实使用素数筛选法即可