因为任何一个正整数都可以通过素数相乘得到,由此我们可以知道:
素数可以视为不能被小于它(或它的平方根)的素数整除的数。
通过动态规划的思想,很容易联想到,如果将求得的素数保存起来,那么在计算后面的素数时,只需要遍历求模已求得的素数表,而避免进行过多的无效操作。
以下为代码:
#include <iostream> #include <vector> #include <iterator> using namespace std; int main(void) { int n; vector<int> bf; vector<int>::iterator ite; bf.push_back(2);//素数从2开始, //直接将2保存以便后面的计算 cin>>n; for(int i = 3; i < n; i ++) { for(ite = bf.begin(); ite != bf.end(); ++ite) if(i % *ite == 0) break; if(ite == bf.end()) //若循环遍历了容器中所有元素 //则i为素数 bf.push_back(i);//将素数i保存 } for(ite = bf.begin(); ite != bf.end(); ++ite) cout<<*ite<<endl; return 0; }
利用动态规划方法求素数
最新推荐文章于 2021-10-28 17:11:35 发布