素数
来源:互联网 发布:明星字体软件 编辑:程序博客网 时间:2024/06/05 14:50
关于素数已经是老生常谈,但对于新手的我来说就是新的体验,可能所写不及大牛的十万分之一
素数(质数):除了1和它本身以外不再有其他因数,这样的数称为素数。
先来素数的判断:(时间复杂度是O(√N),书中说这个是最坏的... )
//判断一个数是否是素数void primeNumber(int n){if (n <= 1){cout << "no" << endl;return;}else if (n == 2 || n == 3){cout << "yes" << endl;return; }elsefor (int i = 2; i <= pow(n, 0.5); ++i)if (n%i == 0) {cout << "no" << endl;return;}cout << "yes" << endl;}
书中提到一个点: B为N的二进制表示法中的位数,那么我们知道O(√N)=O(2^(B/2)),如此表示,当面对比较一个20(二进制)位的数是否是素数和一个40(二进制)位的数是否是素数的运行时间,发现用B更好比较。
后书中让实现厄拉多塞筛:
计算小于N的所有素数的方法:从2~N,找出最小的未被删除的整数i,输出i,然后删除i,2i,3i,... ci( ci<N )
一图胜千言:
时间复杂度为O(NloglogN) ,别问我怎么算的,我也不知道,貌似有:(N/2+N/3+N/5+...)=N(1/2+1/3+1/5+...)=O(NloglogN)
代码如下:
//厄拉多塞数//O(NloglogN)int main(){int n;cout << "请输入n:" << endl;cin >> n;bool* a = new bool[n];memset(a, true, n);for (int i = 2; i < n; ++i){if (a[i] == true)cout << i << " ";int j = i;while (j <= n) {a[j] = false;j += i;}}cout << endl;system("pause");return 0;}
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- 素数
- python接口测试之序列化与反序列化(四)
- Privacy policy
- 服务器配置不当引发的“血案”——论IT系统配置核查的重要性
- 折半查找法(二分查找法)
- Android Studio2.2 用CMakeLists 进行NDK开发遇到的坑
- 素数
- 一元线性回归分析及java实现
- 使用faster_rcnn训练自己的数据
- DIV+CSS规范命名大全集合
- 简单的例子理解依赖注入(PHP)
- 音频降噪
- 括号配对问题
- 创建了对嵌入的互操作程序集间接引用,无法嵌入互操作类型
- Android中的Http通信(一)之Http协议基本知识