当前位置: 首页 > news >正文

爱网站长尾有创意的设计产品

爱网站长尾,有创意的设计产品,长江商学院 网站建设,自做网站教程题目 AcWing 868. 筛质数 题解 方法一:朴素筛法 及其优化:埃氏筛 从2~n枚举 i,再从小到大枚举所有已知的质数 primes[j],筛掉合数 i*primes[j],遇到新的质数就入队 枚举所有小于n的数i,将i的所有倍数筛掉。 筛完后剩下的数就是质数。 朴素做法 void ge…

题目

AcWing 868. 筛质数


题解

方法一:朴素筛法 及其优化:埃氏筛

从2~n枚举 i,再从小到大枚举所有已知的质数 primes[j],筛掉合数 i*primes[j],遇到新的质数就入队==
枚举所有小于n的数i,将i的所有倍数筛掉
筛完后剩下的数就是质数

朴素做法
void get_primes(int n ){for(int i = 2; i <= n; i ++){if(!st[i])primes[cnt ++] = i;//如果是质数,入队for(int j = i + i; j <= n; j +=i)st[j] = 1;//删掉它的所有倍数}
}
时间分析:n/2 + n/3 +....+n/n = n log n(大概)
  1. 朴素做法的优化:埃氏筛法。(此算法由一个埃及人发明,所以叫 埃氏筛法)
    原理:当i不是质数时,没必要筛掉它的倍数,因为它的吧倍数将会是其它质数的倍数。
  2. 筛到N时,如果N没有被筛掉,就说在2~i-1中没有N的约数,所以N是质数。
    时间是O(n log n)约等于 O(n)(和O(n)一个级别)
    3.补充:质数定理:1~n当中有 n / logn 个质数
埃氏筛法
void get_primes(int n ){for(int i = 2; i <= n; i ++){if(!st[i]) {primes[cnt ++] = n;//没被筛掉,说明是质数for(int j = i + i; j <= n; j += i)//干掉它的所有倍数st[j] = 1;}	}
}
时间是O(n log log n)O(n)一个级别

方法二:线性筛法求质数

原理 :n只会被n的最小质因子筛掉
操作
枚举i:(2~n)

  1. i % primes[j] == 0
    => primes[j]一定是i的最小质因子.
    => primes[j]一定是primes[j] * i的最小质因子.
  2. i % primes[j] != 0
    由于是从小到大枚举的质数,若此时还没枚举到i的任何一个质因子。
    说明primes[j]一定小于i的最小质因子。
    那么 primes[j] 也一定是primes[j] * i的最小质因子。
    这个操作可以保证枚举到i时,所有小于等于i的合数都一定会被筛掉。
    证明:对于任意一个合数x,假设primes[j]是x的最小质因数,i一定会在x之前枚举到x/primes[j],这时x就会被筛掉。
    举例
    比如n=12时,x的最小质因数primes[j] = 2
    那么i一定会在12之前枚举到n/primes[j] = 6,此时就会把2*6 = 12 = n筛掉。
    时间:数据范围在 107以上的时候,线性筛法比埃氏筛法快一倍。
void get_primes(int n ){for(int i = 2; i <= n; i ++){//没被筛掉说明是质数,将这个新的质数加入primes里if(!st[i]) primes[cnt ++] = i;//从小到大枚举所有已知的质数 primes[j]for(int j = 0; primes[j] <= n / i; j ++){	//当质数大于n / i的时候break;//等价于 primes[j] * i <= n;也就是筛掉所有小于n的合数就可以了//筛掉合数 i*primes[j]st[primes[j] * i] = 1;	//当这句话发生的时候,primes[j]一定是i的最小质因子//那么用i的最小质因子筛掉i的目的已经达成了,所以跳出循环.if(i % primes[j] == 0) break;}}
}

代码

#include<bits/stdc++.h>
using namespace std;const int N = 1000010;int primes[N], cnt;
bool st[N];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] = 1;if(i % primes[j] == 0) break;}}
}int main(){int n;cin >> n;get_primes(n);cout << cnt << endl;return 0;
}
http://www.yayakq.cn/news/713467/

相关文章:

  • 网站建设网站制作有限2024年最新一轮阳性症状
  • 怎么申请一个网站网站建设虚拟空间
  • 网站参数网络营销是什么专业的课
  • 模版网站可以做seo吗郑州seo联系搜点网络效果好
  • 连江网站建设网站建设相关资料整理的重要性
  • 网站本身对网站打开速度有何影响河南省水利建设管理处网站
  • wordpress企业网站模板手机网站开发成本
  • 用jsp做的网站有哪些吴江区建设局网站
  • 做视频素材怎么下载网站什么是网店
  • 做网站赔钱了wordpress更换域名缩略图不显示
  • 网站建设人员管理制度做网站的什么公司最好
  • 哈尔滨自助建站软件用asp.net做校园网站
  • 营销网站制作苏州网站建设免费
  • 网站开发工资淄博最新软件推广
  • 长治网站制作教程网站管理与维护的优势
  • 手机移动开发网站常见的网站空间有哪些
  • wordpress页面源代码seo怎么优化网站
  • 配资网站开发是什么意思工业品牌设计公司
  • 网站改版建设原则国外网站做盗版
  • flash网站动漫设计招聘信息
  • 四川住房建设和城乡建设厅新网站网站被k怎么查
  • 张氏万家网站建设上海网站建设技术指导公司
  • 网站制作模板教案wordpress必要插件
  • 枣庄手机网站开发门户网站开发视频教学
  • 域名企业备案对网站的好处怎样用网站做单笔外贸
  • 商丘专业做网站公司建设博物馆网站
  • 网站的建设主题定制客户管理软件
  • 网站中的关键词seo设置温州网站建设最新报价
  • 如何由网页生成网站石家庄市建设网站
  • 网址大全查询网站阜新市项目建设网站