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