常见素数筛法

2024-09-05 04:18
文章标签 常见 素数 筛法

本文主要是介绍常见素数筛法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

列出几种常用的素数筛选法,附上计时器。。。

#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;
}


这篇关于常见素数筛法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137925

相关文章

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解

MySQL查看表的最后一个ID的常见方法

《MySQL查看表的最后一个ID的常见方法》在使用MySQL数据库时,我们经常会遇到需要查看表中最后一个id值的场景,无论是为了调试、数据分析还是其他用途,了解如何快速获取最后一个id都是非常实用的技... 目录背景介绍方法一:使用MAX()函数示例代码解释适用场景方法二:按id降序排序并取第一条示例代码解

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

正则表达式r前缀使用指南及如何避免常见错误

《正则表达式r前缀使用指南及如何避免常见错误》正则表达式是处理字符串的强大工具,但它常常伴随着转义字符的复杂性,本文将简洁地讲解r的作用、基本原理,以及如何在实际代码中避免常见错误,感兴趣的朋友一... 目录1. 字符串的双重翻译困境2. 为什么需要 r?3. 常见错误和正确用法4. Unicode 转换的