求第N個素數的值,時間複雜度盡量低

2021-08-07 02:53:45 字數 890 閱讀 2641

今天糾結了整整一下午的這個題,當心不靜的時候,世界就更加浮躁。也許不應該這樣,但是如果能時刻控制自己,那現在的我應該在家裡等待筆試而不是在這裡。。。

先看題:輸入乙個數字n,輸出第n個素數的值。素數(除了1和他自己不能被其他數整除的數)

這道題有很多解法,比如暴力,n的平方的解法,但是這樣的解法當數字很大的時候,其效率太差。當然對於n的平方的解法可以做一些優化,其實我們第二次只需要遍歷到根號n的時候就可以了,而不用全部遍歷,這樣可以提高一部分效率。在此基礎上,還可以,我們第二次遍歷的時候有意的跳過偶數,奇數遍歷到根號n的地方就好。

這些方法都可以,今天我用的方法叫什麼什麼演算法,反正是一位希臘的大牛開發出來的,思想很簡單。大體是:從2開始,將2的倍數全部標記起來,他們不是素數,然後從3開始,將3的倍數標記起來,他們也不是。然後應該到4,但是4被標記過了,所以到5,將5的倍數標記起來,,,以此類推,一直到10。然後遍歷這些標記過的資料,沒有標記的就是我們要求的素數。這是典型的空間換時間的演算法,思路很簡單。

#include #include using namespace std;

#define max 10000

int find_n(int n);

int j = 0;

for(int i = 2; i <= 10; i++)

j++;

} }

//上述**進行標記。

int h;

n--;

for(h = 2; h < max && n; h ++)

if(h < max)

return h-1;

else

return -1;

}int main()

{ int n;

cin>>n;

cout<

求演算法的時間複雜度級別

該題目出自王道2015年資料結構複習指導p008綜合應用第一題。1 題目 乙個演算法所需時間由下述遞迴方程表示,試求出該演算法的時間複雜度級別 或階 t n 1,若n 1 t n 2t n 2 n,若n 1 式子中,n是問題的規模,為簡單起見,設n是2的整數冪。2 解題思路 根據上述的遞迴公式求出式...

素數篩(卡時間複雜度的題目)

1 型別 數學中典型的素數題目。2 題目 description 現在給你乙個正整數n,要你快速的找出在2 n這些數裡面所有的素數。input 給出乙個正整數數n n 2000000 但n為0時結束程式。測試資料不超過100組 output 將2 n範圍內所有的素數輸出。兩個數之間用空格隔開 sam...

x的n次的時間複雜度

比較容易想到的是一層迴圈,不斷更新res o n intfunction1 int x,int n return res 可以用遞迴,但複雜度仍為o n o n 遞迴深度 n 單層遞迴時間複雜度 o 1 intfunction1 int x,int n 遞迴另一種寫法,結果仍為o n 相當於一棵滿二...