1013 数素数 (20)(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
作者: CHEN, Yue
单位: PAT联盟
时间限制: 200ms
内存限制: 64MB
代码长度限制: 16KB
package pat_b;
import java.util.Scanner;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.Arrays;
//直接把素数表先打出来
public class PAT_B_1013
{
public static void main(String[] args)
{
int len = 200005;//素数表的长度,要大一些,100005太小,会有错误。
int[] sushu = new int[len];
Arrays.fill(sushu, 1);//1代表是素数,0代表非素数
for(int i = 2; i < len; i++)//计算出素数表
{
if(sushu[i] == 1)
{
for(int j = i+i; j < len; j +=i)
{
sushu[j] = 0;
}
}
}
Scanner in = new Scanner(System.in);
int start = in.nextInt();
int end = in.nextInt();
int count = 0;//素数表中的第几个素数
int line = 0;//[start,end]范围内的第几个素数
for(int i = 2; i < len; i++)
{
if(sushu[i] == 1)//找到素数
{
count ++;
if(count >= start && count <= end)//找到[start,end]范围内的素数
{
line++;
if(line % 10 == 1)//格式化输出
System.out.print(i);
else
System.out.print(" " + i);
if(line % 10 == 0)
{
System.out.println();
}
}
}
}
}
}