令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.Scanner;
public class p1013 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
sc.close();
int num = 0; //素数对应的个数
for (int i = 1;; i++) {
if (isPrimeNum(i)) {
num++;
if (num >= m && num <= n) {
if ((num - m + 1) % 10 == 0 || num - m == n - m) { //每当输出第10个数或最后一个数时
System.out.println(i);
} else {
System.out.printf("%d ", i); //不是每行最后一个数时
}
if (num == n) //计算到输入的第二个输入对应的素数时结束
break;
}
}
}
}
public static boolean isPrimeNum(int a) { //判断是否为素数
if (a == 1) { //1不是
return false;
}
if (a % 2 == 0 && a != 2) { //能被2整除的也不是,但2是素数所以要排除
return false;
}
for (int i = 3; i <= Math.sqrt(a); i += 2) { //能被3、5、7、9...整除的也不是素数
if (a % i == 0) {
return false;
}
}
return true;
}
}