第100001個素數是什麼?_藍橋杯

題目:求第100001個素數是什麼?

質數(prime number)又稱素數,有無限個。除了1和它本身以外不再有其他的除數整除。根據算術基本定理,每一個比1大的整數,要麼本身是一個質數,要麼可以寫成一系列質數的乘積,最小的質數是2。

public class Main { 
//求第10001個素數
//2 3 5
public static void main(String[] args) {
    //爲從1~N的所有整數開闢一個數組空間,標記該數是否爲素數(0爲素數)
    int N = 1000*1000*10;
    boolean[] a = new boolean[N];

    //接下來進行篩選法
    /*在這裏,篩選法是一個兩層的for循環,兩個關鍵點
     *1、思路是,i * k 如果還在 N 之內,即該數可以被i*j整除,不滿足素數,篩掉,標1
     *2、i與j的循環條件,ij均從2開始循環,那麼試想,i*k在滿足<N時,他們的最大是多少呢
     *   明顯,i=2;i<N/2  i最大爲 N/2
     *   相應的,i*j<N, j=2;j<N/i
     *Ps. ij爲什麼從2開始?因爲若ij爲1的話,乘得的數可能爲素數,例如1*1=1;1*3=3。。。
     *   ij從2開始的話,第一個判斷的數爲4,而2、3正好都爲素數,所以置之不理即可。
     *   對於1不計入素數,所以本題的循環大多從2 開始,直接略過1。
     **/
    **for(int i=2; i<N/2; i++){
        if(a[i] == true) continue;

        for(int j=2; j<=N/i; j++){
            if(i*j<N) a[i*j] = true;
        }
    }**//篩選結束

    int x = 100001;
    int count=0;
    //從1開始記錄素數,遇到a[i]=false就加1,直到遇到第x個,輸出i
    for(int i=2;i<N;i++){
        if(a[i]==false){
            count++;
            if(count == x)
                System.out.println(i);
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章