求1到n之间的素数

来源:互联网 发布:梁国平广东广电网络 编辑:程序博客网 时间:2024/05/24 03:19

    题目:求1到n之间的素数,n>=2。

    方法一:试除法。判断3到n之间所有奇数是否为素数。判断一个数是否为素数时,只需试除小于等于根号n的所有素数。

bool IsPrime(int n, const vector<int> &res){int mark = sqrt(n);for (int index=0; index<res.size() && res[index]<=mark; index++){if (n%res[index] == 0)return false;}return true;}vector<int> FindPrimes(const int &n){vector<int> res;if (n <= 1)return res;res.push_back(2);for (int i = 3; i <= n; i+=2){if (IsPrime(i,res))res.push_back(i);}return res;}

    方法二:筛选法。

int FirstTrue(const vector<bool> &IsPrime, int start){for (int i = start; i < IsPrime.size(); i++){if (IsPrime[i])return i;}return  IsPrime.size();}vector<int> FindPrimes2(const int &n){vector<int> res;if (n <= 1)return res;vector<bool> IsPrime(n + 1, true);int i = 2;while (i=FirstTrue(IsPrime, i), i<= n){res.push_back(i);for (int a = 2, j = i *a; j <= n; a++){IsPrime[j] = false;j = i*(a+1);}i++;}return res;}


0 0
原创粉丝点击