三重for迴圈優化 求N以內所有質數的演算法及優化

2021-10-12 09:28:54 字數 815 閱讀 6793

問題:輸入乙個正整數 n(n > 2),求小於 n 的全部質數。

質數,就是除了1和它本身外不存在其他任何因子的數。

迴圈法:利用質數的定義,迴圈判斷該數除以比它小的每個自然數(大於1),如果有能被它整除的,則它就不是質數。

示例**如下:

#include using namespace std;

int main()

}if (flag)

}cout << "sumstep: " << sumstep << endl;

return 0;

}

執行結果如下:

可以看到,當 n = 50 時,上述演算法總共進行了349次迴圈。

在上述基本演算法的基礎上,可以對迴圈進行一些優化,減少迴圈次數:

**優化如下:

#include #include using namespace std;

int main()

}if (flag)

}cout << "sumstep: " << sumstep << endl;

return 0;

}

執行結果如下:

優化後,只需31次迴圈,相比原來的349次,大大減少了迴圈次數,提公升了演算法效率。

求n以內的所有因子數

在網上搜到的都是些求質因子的,剛好今天遇到一道題,題目思路錯了,就碼了乙個求乙個數所有因子的模板。再根據公式n p1 x1 p2 x2 pm xm,pi表示質因子數,xi表示其指數,從而可以看出n的所有因子都是可以通過質因子組合而來,並且有n的因子個數等於 x1 1 x2 1 xm 1 所以該模板的...

求N以內的所有素數

如下 include stdafx.h include conio.h include math.h include malloc.h typedef long long prime typedef struct pn 構造素數節點 struct pn next pn static pn prime...

求質數的三重境界

經典題,求出小於 n 比如100 的所有質數。質數的定義還是不厭其煩贅述一下 大於1的正整數,且不能被1和它本身之外的正整數整除。質數又稱素數,其他的就是合數。本文用python實現。1,試除法 根據質數的定義,很容易得出直接的推導 遍歷2到n,對每個數 i 都用2到 i 的整數去試除 i,一旦 i...