題目描述
令Pi表示第i個素數。現任給兩個正整數M <= N <= 10000,請輸出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
package io;
import java.util.Scanner;
public class Main {
/**
* 主要思路:數篩法的應用。偶數一定不爲素數(2除外),
* 奇數的偶數倍一定不爲素數。
* 事先開闢數組,記錄當前數的狀態(即是否爲素數)
* @param
*/
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int m=in.nextInt();
int n=in.nextInt();
calPrimeNumber(m,n);
}
private static void calPrimeNumber(int m, int n) {
int length=110000;
boolean[] prime=new boolean[length+1];
for(int i=2;i<prime.length;i++){
if(i%2==0)
prime[i]=false;
else
prime[i]=true;
}
for(int i=3;i<=Math.sqrt(prime.length);i+=2){
for(int j=i+i;j<prime.length;j+=i)
prime[j]=false;
}
prime[2]=true;
int count=0;
for(int i=2;i<prime.length;i++){
if(prime[i]){
count++;
if(count>=m && count<=n){
System.out.print(i);
if((count-m+1)%10==0)
System.out.println();
else
if(count<n)
System.out.print(" ");
}
if(count>n)
break;
}
}
}
}