~~线性筛法求素数(附模板题)
模板
int primes[N], cnt; // primes[]存储所有素数
bool st[N]; // st[x]存储x是否被筛掉void get_primes(int n)
{for (int i = 2; i <= n; i ++ ){if (!st[i]) primes[cnt ++ ] = i;for (int j = 0; primes[j] <= n / i; j ++ ){st[primes[j] * i] = true;if (i % primes[j] == 0) break;}}
}
题目
给定一个正整数n,请你求出1~n中质数的个数。
输入格式
共一行,包含整数n。
输出格式
共一行,包含一个整数,表示1~n中质数的个数。
数据范围
1≤n≤106
输入样例:
8
输出样例:
4
void get_primes(){//外层从2~n迭代,因为这毕竟算的是1~n中质数的个数,而不是某个数是不是质数的判定for(int i=2;i<=n;i++){if(!st[i]) primes[cnt++]=i;for(int j=0;primes[j]<=n/i;j++){//primes[j]<=n/i:变形一下得到——primes[j]*i<=n,把大于n的合数都筛了就//没啥意义了st[primes[j]*i]=true;//用最小质因子去筛合数//1)当i%primes[j]!=0时,说明此时遍历到的primes[j]不是i的质因子,那么只可能是此时的primes[j]<i的//最小质因子,所以primes[j]*i的最小质因子就是primes[j];//2)当有i%primes[j]==0时,说明i的最小质因子是primes[j],因此primes[j]*i的最小质因子也就应该是//prime[j],之后接着用st[primes[j+1]*i]=true去筛合数时,就不是用最小质因子去更新了,因为i有最小//质因子primes[j]<primes[j+1],此时的primes[j+1]不是primes[j+1]*i的最小质因子,此时就应该//退出循环,避免之后重复进行筛选。if(i%primes[j]==0) break;}}}
~~线性筛法求素数(附模板题)相关推荐
- 线性筛法求素数c语言,[算法]素数筛法(埃氏筛法线性筛法)
一.素数筛的定义 给定一个整数n,求出[1,n]之间的所有质数(素数),这样的问题为素数筛(素数的筛选问题). 二.埃氏筛法(Eratosthenes筛法) 埃氏筛法又叫做Eratosthenes筛法 ...
- 一般筛法和快速线性筛法求素数 求素数的一点总结
素数总是一个比较常涉及到的内容,掌握求素数的方法是一项基本功. 基本原则就是题目如果只需要判断少量数字是否为素数,直接枚举因子2 ..N^(0.5) ,看看能否整除N. 如果需要判断的次数较多,则先用 ...
- 一般筛法求素数+快速线性筛法求素数
一般筛法求素数+快速线性筛法求素数 标签: 正则表达式算法优化扩展c 2010-08-22 01:28 28738人阅读 评论(8) 收藏 举报 分类: 算法学习资料(5) 版权声明:本文为博主原 ...
- 欧拉线性筛法求素数(顺便实现欧拉函数的求值)
标签:欧拉筛法 素数 欧拉函数 phi 我们先来看一下最经典的埃拉特斯特尼筛法.时间复杂度为O(n loglog n) int ans[MAXN]; void Prime(int n) { ...
- 数论 判断素数:普通素数判别 线性筛 二次筛法求素数 米勒拉宾素数检验
普通的素数判断法 当我们要判断一个数字是否是素数的时候,往往会直接看这个数字模1到这个数字的根号,看有没有等于零的,从而判断这个数字是不是素数,这样做的时间复杂度为O(sqrt(n)) bool is ...
- 素数筛法求素数(线性时间)
摘自:http://blog.csdn.net/once_hnu/article/details/6302283 逆向思维的典型应用! 1)普通方法判断素数:O(n*sqrt(n)) 2)筛法求素数: ...
- AcWing 874. 筛法求欧拉函数(线性筛法求欧拉函数模板)
给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和. 输入格式 共一行,包含一个整数 n. 输出格式 共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和. 数据范围 1≤n≤10^6 输入 ...
- 普通素数 筛法求素数 二次筛法求素数 MillerRabin素数测试【模板】
素数和合数共同的性质: 1.a > 1是合数,当且仅当a = b * c,其中1 < b < a,1 < c < a. 2.合数必有素数因子. 3.如果d > 1, ...
- CodeForce 236B Easy Number Challenge(筛法求素数 + 整数因式分解)
题目链接:http://codeforces.com/problemset/problem/236/B Easy Number Challenge time limit per test 2 seco ...
最新文章
- VS Debug必备技能
- python3.6.4安装教程-python3.6.4如何安装到树莓派3代
- play2框架 jpa mysql_单元测试 – Playframework 2.2.x Java JPA – 用于单元测试和生产的独立数据库...
- 信息学奥赛一本通(1054:三角形判断)
- Android 系统(43)---HTTPS
- java新手笔记16 面积
- 让C# Excel导入导出,支持不同版本的Office
- 《Spring揭秘》
- ngrok转发mysql连接_使用小米球 -Ngrok 实现内网转发
- coreseek添加新词库
- 计算机毕业设计Java河池市旅游信息系统(源码+系统+mysql数据库+lw文档)
- 产品经理应该如何学习
- 认清GPU的流处理器作用
- win7 android 双系统平板 p1000,优派Win7/Android双系统ViewPad 100
- 【旧文集】解忧杂货店读后感悟-记于2016年底
- Simulink仿真时间、步长、精度和解法器设置
- IDEA 2021.1 的 Win 和 Mac 快捷键大全!!
- ubuntu安装androidstudio
- 关于放大器中的SR参数
- docker php安装gd扩展_docker php 容器安装GD库