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

网站框架建设汕头哪里做网站

网站框架建设,汕头哪里做网站,wordpress动态导航,如何修改网站备案题目 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/866404/

相关文章:

  • 唐山的网站建设做网站基础源代码
  • 中国网站建设网京东网站建设的意义
  • 南宁网站定制团队郑州金水区网站建设
  • 农业技术推广网站做网站的意义是什么
  • 手机建站系统建设外贸网站
  • 施工方案下载免费网站上海网站建设费用多少钱
  • 上海网站建设觉策动力怎么选择网站建设公司
  • 需要做网站的企业电话信息流广告代运营
  • 怎么用自己电脑当服务器建设网站meetsh网站建设
  • 软件推广公司包括搜索引擎排名、网页标签优化、相关链接交换、网络广告投放等
  • 商城网站都有什么功能吗百度提交收录
  • 郑州 科技有限公司 网站建设想建设一个网站自己接一些小活
  • 门户网站建设和检务公开整改来个网站好人有好报2024
  • 中文门户网站有哪些长沙网站设计优秀柚v米科技
  • 手机app开发软件有哪些seo建站优化推广
  • 网站开发业务怎么开展企业管理专业主要课程
  • 网站的设计制作流程网站子页怎么做 视频
  • 建立网站的正确方法临沂天元建设集团网站
  • 网络营销定价的特点沧州网站改版优化
  • 漳州市住房建设局网站百度大数据预测平台
  • html5商业网站开发北大青鸟国内外优秀vi设计案例
  • 建设银行短信开通网站免费网站建设视频
  • 来年做那些网站致富做网站的基本步骤
  • 电子商务网站开发目的网站建设的基本技术
  • 谷歌做英文网站网络舆情分析案例
  • 策划运营南昌官网seo收费标准
  • 网站建设入门解读怎样不让网站被收录
  • 蓝色机械企业网站模板网站建设实习内容
  • 优化推广网站选服务好的网站建设公
  • 成都网站优化seo网站该怎么找