1013 數素數 (20分)
令 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
第一版:JAVA(格式錯誤,部分正確,答案錯誤??)
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
public class Main {
/*
* 1013 數素數 (20分) 令 P i 表示第 i 個素數。現任給兩個正整數 M≤N≤10的4次方 ,請輸出 P M 到 P
* N 的所有素數。
*
* 輸入格式: 輸入在一行中給出 M 和 N,其間以空格分隔。
*
* 輸出格式: 輸出從 P M 到 P N 的所有素數,每 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
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
HashSet<Integer> hashSet = new HashSet<Integer>();
ArrayList<Integer> arrayList = new ArrayList<Integer>();
int sum = 2;
while (sum <= 10000) {
if (isThisNumber(sum)) {
arrayList.add(sum);
}
sum++;
}
int start = scanner.nextInt();
int end = scanner.nextInt();
int count = 1;
for (int i = start - 1; i < end; i++) {
System.out.print(arrayList.get(i));
if ((count) % 10 == 0) {
System.out.println();
} else {
System.out.print(" ");
}
count++;
}
}
static boolean isThisNumber(int number) {
for (int a = 2; a < number; a++) {
if (number % a == 0) {
return false;
}
}
return true;
}
}
他人代碼:JAVA
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
int temp = 0;
int t = 1;
for (int i = 2;; i++) {
if(m!=n) {
if (isPrime(i)) {
temp++;
}
if (temp >= m && isPrime(i) && temp != n) {
if (t % 10 == 0) {
System.out.print(i);
System.out.println();
t = 1;
continue;
}
System.out.print(i + " ");
t++;
}
if (temp == n) {
System.out.print(i);
break;
}
}else {
if (isPrime(i)) {
temp++;
}
if(temp == m) {
System.out.print(i);
break;
}
}
}
scanner.close();
}
public static boolean isPrime(int n) {
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0)
return false;
}
return true;
}
}
C++
#include <iostream>
#include <vector>
using namespace std;
bool isprime(int a) {
for (int i = 2; i * i <= a; i++)
if(a % i == 0) return false;
return true;
}
int main() {
int M, N, num = 2, cnt = 0;
cin >> M >> N;
vector<int> v;
while (cnt < N) {
if (isprime(num)) {
cnt++;
if (cnt >= M) v.push_back(num);
}
num++;
}
cnt = 0;
for (int i = 0; i < v.size(); i++) {
cnt++;
if (cnt % 10 != 1) printf(" ");
printf("%d", v[i]);
if (cnt % 10 == 0) printf("\n");
}
return 0;
}