PAT乙级题解1013——数素数(Java)
一:题目
二:输入输出
输入样例:
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;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
out(m, n);
}
static void out(int m, int n) {
int i, j, count = 0, num = 1;
for (i = 2; ; i++) {
for (j = 2; j < Math.sqrt(i); j++) {
if (i % j == 0) //while prime number
break;
}
if (j > Math.sqrt(i)) {
count++;
if (m <= count && count <= n) {
if (num % 10 != 0 && count != n) {
System.out.print(i + " ");
num++;
} else {
System.out.println(i);
num++;
}
}
}
}
}
}
AC代码:
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int M = s.nextInt();
int N = s.nextInt();
int[] primes = new int[10000];
int index = 0;
for (int i = 2; i < 1000000; i++) {
if (index > 9999)
break;
if (isPrime(i))
primes[index++] = i;
}
int count = 0;
for (int i = M-1; i < N; i++) {
if (count == 9) {
System.out.println(primes[i]);
count = 0;
} else {
// 如果是最后一个数字,不加空格
if (i == N-1) {
System.out.print(primes[i]);
} else {
System.out.print(primes[i]+" ");
}
count++;
}
}
}
static boolean isPrime(int num) {
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0)
return false;
}
return true;
}
}