高效生成素数
来源:互联网 发布:公共领域道德缺失知乎 编辑:程序博客网 时间:2024/06/05 07:28
#include <iostream>#include <cmath>#include <ctgmath>#define MAX 100000000int main(){ bool *tagArray = new bool[MAX+1]; for (int i = 1; i <= MAX; ++i) { if (i % 2 == 1) tagArray[i] = true; else tagArray[i] = false; } for (int i = 3; i <= sqrt(MAX); i += 2) { if (tagArray[i]) for (int j = i + 1; j <= MAX; j += i) tagArray[j] = false; } /* int count = 0; for (int i = 3; i <= MAX; i += 2) { if (tagArray[i]) { count++; std::cout << i << " "; if (count % 10 == 0) std::cout << std::endl; } } getchar(); */ std::cout << "finish..." << std::endl; getchar(); return 0;}
我们用高效的素数筛选法来进行。
素数筛法是这样的:
1.开一个大的bool型数组prime[],大小就是n+1就可以了.先把所有的下标为奇数的标为true,下标为偶数的标为false.
2.然后:
for( i=3; i<=sqrt(n); i+=2 )
{ if(prime[i])
for( j=i+i; j<=n; j+=i ) prime[j]=false;
}
3.最后输出bool数组中的值为true的单元的下标,就是所求的n以内的素数了。
原理很简单,就是当i是质(素)数的时候,i的所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质数的倍数筛掉。
100000000 大概3秒。
0 0
- 高效生成素数
- 高效求素数--筛法求素数
- 高效素数打表
- 高效判断素数方法
- 高效素数打表
- 高效素数打表
- 素数高效打表法
- 高效判断素数方法
- 高效求素数
- 素数的高效判断
- 高效寻找素数
- 高效素数打表法
- 高效判断素数方法
- 高效素数打表
- 高效素数打表
- 高效素数打表
- 高效判断素数
- 逐步修改素数高效算法
- maven Spring 4.2+SpringMVC+dubbo解决TypeProxyInvocationHandler.invoke(SerializableTypeWrapper.java:239
- Java线程池
- [leetcode]335. Self Crossing
- Android黑盒测试之Monkey测试
- Window消息大全
- 高效生成素数
- ClassyShark——apk分析利器
- 吐槽
- Java进阶08 GUI
- 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(2)
- AndroidStudio项目第三方jar混淆规则
- java装饰模式
- js变量和js数据类型关系
- 关于使用JS动态修改CSS样式问题