常见素数筛法
来源:互联网 发布:fkshow软件安卓版 编辑:程序博客网 时间:2024/06/08 00:27
列出几种常用的素数筛选法,附上计时器。。。
#include<cstdio>#include<cstdlib>#include<cmath>#include<map>#include<queue>#include<stack>#include<vector>#include<algorithm>#include<cstring>#include<string>#include<iostream>#include<windows.h>#define ms(x,y) memset(x,y,sizeof(x))const int MAXN=90000000;const int INF=1<<30;const int sq=(int)sqrt(double(MAXN)); using namespace std;int u;int len;bool vis[MAXN+5];int prime[1000000];/* * 奇数筛法,(偶数肯定不是素数,故只需要判断奇数即可)即是vis数组里面虚拟的值都是奇数 */void print_prime() { if(MAXN&1==0) len=MAXN/2-1;else len=(MAXN+1)/2-1;bool *p; for(int i=0; i*i<len; i++){ if(vis[i]){int b=2*i+3;//第i个奇数的值 for(p=vis+i+b; p<vis+len; p+=b) *p=false; } } } /* * 普通筛法 */void print_prime1(){for(int i=2; i*i<=MAXN; i++){if(vis[i]==true){for(int j=i*i; j<=MAXN; j+=i) vis[j]=false;}}}/* * 减少重复筛选 */void print_prime2(){for(int i=2; i<=MAXN; i+=2)vis[i] = false;vis[2] = true;for(int i=3; i*i<=MAXN; i++){if(vis[i]==true){for(int j=i*i; j<=MAXN; j+=2*i) vis[j]=false;}}}/* * 小数据常用方法 */void print_prime3(){for(int i=2; i<=MAXN; i++){int ok=1;for(int j=2; j*j<=i; j++){if(i%j==0){ok=0;break;}}}}int main(){ms(vis,true);FILETIME beg,end;//<windows.h>里的计时器GetSystemTimeAsFileTime(&beg);print_prime2(); GetSystemTimeAsFileTime(&end);long time = 100*(end.dwLowDateTime-beg.dwLowDateTime);cout<<time<<endl;#if 0for(int i=2; i<=MAXN; i++) if(vis[i]==true) u++; cout<<u<<endl;#endifu=1;for(int i=0; i<len; i++) if(vis[i]==true) u++; cout<<u<<endl;return 0;}
0 0
- 常见素数筛法
- 又见素数(素数筛法)
- nyoj 26 孪生素数 素数筛法
- HDU 4548 美素数 // 素数筛法
- 素数判断和素数筛法
- 素数筛法-----》大规模的判断素数
- 素数筛(筛选法求素数)
- 素数筛选法(素数筛)
- 森德拉姆素数筛法
- 素数筛法
- 素数筛法
- 筛法素数表
- 筛素数法
- POJ2262 素数筛法
- POJ3306 素数筛法
- 素数筛法
- 素数筛法
- 素数筛法
- C#配置app.config
- UVA刷题一周
- JQuery插件iScroll实现下拉刷新,滚动翻页特效
- 自制javascript库
- 启用nginx的fastcgi cache提高网站php访问速度
- 常见素数筛法
- HTTP POST&GET
- oracle下逻辑的导入导出工具exp/imp
- win7 无法打开不同版本软件的GUI界面
- MyEclipse使用小技巧总结
- 关于javapoi导出Excel的Demo
- JAVA基础知识——数组
- UITextField 属性讲解
- jQuery源码分析系列