import java.util.Scanner;
public class B1013_2 { /*求素数表第m到第n个中间的所有素数*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int M = in.nextInt();
int N = in.nextInt();
boolean []num = new boolean[10001];
for (int x = 1; x < 10001; x++) /* num[1] ~ num[10001] 均不是质数*/
{
num[x] = true;
}
int []prime = new int[N+1];/*若是N,则不到27, 27越界了,所以N+1 */
int z = 0;
for (int i = 2; i < 10001; i++) /*把小于10000的素数都求了一遍*/
{
if (num[i] == true) /*是质数*/
{
prime[z++] = i; /*若是prime[i] = i z是第几个质数*/
if (z > N)
{
break;
}
for (int j = i + i; j < 10001; j += i) /*筛掉它的所有倍数*/
{
num[j] = false; /*不是质数*/
}
if (z >= M && z <= N)
{
if ((z-M+1) % 10 > 0 && z != N)
{
System.out.print(prime[z] + " ");
}
else if ( z % 10 == N)
{
System.out.print(prime[z]);
}
else
{
System.out.print(prime[z]);
System.out.print("\n");
}
}
}
}
in.close();
}
}
令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
筛法求素数表,输出全是0?
Scanner in = new Scanner(System.in);
int M = in.nextInt();
int N = in.nextInt();
boolean[] num = new boolean[10001];
for (int x = 1; x < 10001; x++) /* num[1] ~ num[10001] 均不是质数 */
{
num[x] = true;
}
int z = 0;
List<Integer> lists = new ArrayList<>();
for (int i = 2; i < 10001; i++) /* 把小于10000的素数都求了一遍 */
{
z += 1;
if (num[i] == true) /* 是质数 */
{
// prime[z] = i; /* 若是prime[i] = i z是第几个质数 */
if (z > N) {
break;
}
for (int j = i + i; j < 10001; j += i) /* 筛掉它的所有倍数 */
{
num[j] = false; /* 不是质数 */
}
if (z >= M && z <= N) {
lists.add(i);
}
}
}
for (int i = 0; i <= lists.size(); i += 10) {
for (int j = i; j < i + 10 && (i + 10) <= lists.size(); j++) {
System.out.print(lists.get(j) + " ");
}
System.out.println();
}
// 显示余下的.
if (lists.size() % 10 != 0) {
for (int i = lists.size() - (lists.size() % 10); i < lists.size(); i++) {
System.out.print(lists.get(i) + " ");
}
}
in.close();
改好了,参考下.