素数筛选
时间:2022-07-24
本文章向大家介绍素数筛选,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
所谓素数,就是除了一跟本身不能被奇因子整除
那么就直白的思路就是
bool isp(int x){
if(x<2) return false
else{
for(int i=2;i*i<x;i++){
if(!(x % i))
return false;
}
}
return true;
}
此种只适用与平时水题,n比较小的!
那么我们来看一种比较高效的思维
思路:我们知道素数的倍数肯定不是素数,所以的话,我们将素数的倍数置为1,经过这一系列处理后,遍历输出为0的即求出了N以内的所有素数!
for (int i=2;i<=n;i++)
{
if(!a[i])
{
for (int j=2*i;j<=n;j+=i)
a[j]=1;
}
}
这个其实还是可以优化的,仔细想想这里面有重复筛选的情况,比如6,它就是2*3,但是筛选的时候筛选了2次,因为它既是2的倍数,也是3的倍数。所以这个代码还可以进一步优化。
int pr[2000005];
void is_suu(int n)
{
int m=sqrt (double(n+0.5));
memset (pr,0,sizeof(pr));
for (int i=2;i<=m;i++)
{
if(!pr[i])
{
for (int j=i*i;j<=n;j+=i)
pr[j]=1;
}
}
for (int i=2;i<=n;i++)
if(!pr[i])
printf("%d ",i);
printf("n");
}
还有一种方法如下:(虽然不怎么明白原理)
int isPrime(int n)
{
if(n<=1)
return 0;
if(n==2||n==3)
return 1;
if(n%6!=5&&n%6!=1)
return 0;
for(int i=5;i<=sqrt(n);i++)
if(n%i==0||n%(i+2)==0)
return 0;
return 1;
}
这里一段完整的代码让大家运行感受下
#include<bits/stdc++.h>
#define N 100000
using namespace std;
/*
bool isp(int x){
if(x<2) return false
else{
for(int i=2;i*i<x;i++){
if(!(x % i))
return false;
}
}
return true;
}
*/
int pr[2000005];
void is(int n)
{
int m=sqrt (double(n+0.5));
memset (pr,0,sizeof(pr));
for (int i=2;i<=m;i++)
{
if(!pr[i])
{
for (int j=i*i;j<=n;j+=i)
pr[j]=1;
}
}
for (int i=2;i<=n;i++)
if(!pr[i])
printf("%d ",i);
printf("n");
}
int main(){
int t;
cin>>t;
is(t);
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【49期】面试官:SpringMVC的控制器是单例的吗?
- 马的遍历
- 命名那个数字
- 挤牛奶Milking Cows
- 用了这么久axios,你知道它是如何封装 HTTP 请求的吗?
- 方块转换 Transformations
- 回文平方数 Palindromic Squares
- 双重回文数 Dual Palindromes
- 修理牛棚 Barn Repair
- 牛式 Prime Cryptarithm
- 解题报告(牛客OI周赛7-普及组)
- 号码锁 Combination Lock
- 数据结构回顾及展望(一)
- Spring Boot 整合 Quartz 实现 Java 定时任务的动态配置
- 数据结构回顾及展望(二)(3.22更新)