求解素數(質數)集合的四種演算法(Java版本)

2021-06-22 02:34:47 字數 1123 閱讀 7963

素數又稱質數,是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。

介紹四種求解自然數n以內素數集合的方法,求解效率依次遞進,想看最有效率的方法直接翻到最後就好。

演算法原理:如果乙個數字能被

時間複雜度:

// 判斷單個自然數是不是素數

private static boolean isprime(int num)

return true;

}// 求解素數集合

public static listgetprimes(int n)

return primes;

}

演算法原理:因為時間複雜度:

// 判斷單個自然數是不是素數

private static boolean isprime(int num)

return true;

}// 求解素數集合

public static listgetprimes(int n)

return primes;

}

演算法原理:從2開始,將時間複雜度:

我的**實現與演算法原理稍有不同,因為**邏輯將「收集素數」和「篩除合數」兩件事情合併到了乙個for迴圈裡面

public static listgetprimes(int n) 

}return primes;

}

埃氏篩法的不足之處是會重複篩除一些合數,比如合數18,判斷2是否素數時會被篩除一次,判斷3是否素數時又被篩除一次。

就是因為這個原因,它的時間複雜度才到不了

演算法原理:從2開始,將

時間複雜度:

public static listgetprimes(int n) 

}return primes;

}

演算法中break那行**的原理最難理解,作用就是彌補埃氏篩法的不足,防止重複篩除合數。

**含義:如果當前素數primes.get(j)是數字i的最小質因數,那麼後面的素數就不可能是數字i及其倍數的最小質因數。

舉個例子:假如當前數字是8,當前素數是2,理應跳出迴圈。如果繼續,那麼下乙個素數是3,所以

php 四種基礎演算法集合

排序演算法學習 1 氣泡排序 思路分析 在要排序的一組數中,對當前還未排好的序列,從前往後對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即,每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。實現 arr array 1,40,54,62,21,55,32,79,3...

遍歷集合的四種方式

以arraylist為例。listlist new arraylist for int i 0 i 11 i 遍歷方式一 普通for迴圈 適合arraylist。for int i 0 i遍歷方式二 增強for迴圈 底層是迭代器,比較適合遍歷linkedlist。for integer i list...

遍歷Map集合的四種方式

1.在for each迴圈中使用entries來遍歷 map integer,integer map new hashmap integer,integer for map entry integer,integer entry map entryset 2.在for each迴圈中遍歷keys或v...