問題:輸入乙個正整數 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...