2. 令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。
输入描述:
输入在一行中给出M和N,其间以空格分隔。
输出描述:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
示例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
//思路: 1 判断i是否为素数
2 将素数储存在一个数组内
3 截取区间输出要求的素数并按照一定格式打印
import java.util.Scanner;
public class Main{
//判断是否为素数
public static boolean isPrime(int i){
if(i<==1){
return false;
}else if(i==2){
return true;
}else if(i%2==0){
return false;
}else{ // >2的情况 从3开始,因为2的已经考虑过
for(int j=3;j<=(int)(Math.sqrt(i));j+=2){
if(i%j==0)
return false;
}
return true;
}
}
//主程序
public static void main(String [] args){
Scanner sc=new Scanner(System.in);
int begin=sc.nextInt(); //M
int end=sc.nextInt(); //N
int [] arr=new int[end];
int i=2; //2是第一个素数
int index=0; //数组下标
while(index<end){
if(isPrime(i)){
arr[index]=i; //数组储存素数
index++;
}
i++; //数字增加
}
//按照格式打印
int ten=0;
for(int j=(begin-1);j<end;j++){ //打印区间内的数字
System.out.print(arr[j]);
ten++;
if(ten %10==0){ //判断是否该换行了
System.out.println();
continue;
}
if( j!=end-1) //不是最后一个元素时需要中间空格
System.out.print(" ");
}
}
}