![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
筛素数算法
文章平均质量分 59
chenxiaoran666
人要有梦想,不然和咸鱼有什么区别!
展开
-
筛素数算法(一)——线性筛素数算法
时间复杂度:O(nlogn)先上代码(代码后面有解析):#include<bits/stdc++.h>using namespace std;int n;map<int,int> Is_Prime;//保存每一个数是否为质数vector<int> Prime;//保存全部质数int main(){ scanf("%d",&n);/...原创 2018-03-24 14:19:32 · 4529 阅读 · 1 评论 -
筛素数方法(二)—— 费马小定理及MR素数判断
注明:本文中的x^y表示x的y次方 一、费马小定理1.1 内容若p为素数,a为正整数,且gcd(a,p)=1,则a^(p−1)≡1(mod p)。1.2 证明因为p为素数,所以gcd(i,p)=1(1<=i<=p-1,i为整数),可推出①gcd((p-i)!,p)=1,又因为gcd(a,p)=1,所以gcd(i∗a,p)=1,则②没有一个i*a是p的倍数。 设a...原创 2018-03-31 09:55:40 · 2503 阅读 · 0 评论 -
筛素数方法(三)——除余法
当你要筛选出2~n之间的质数时,除了线性筛、MR素数判断等方法以外,还有一种叫做除余法的算法。 除余法的优点 时间复杂度:O((n√n)/3) 空间复杂度:较低 筛出2~n之间的素数比较暴力的方法,自然就是暴力枚举加上O(√n)判断,代码如下:#include<bits/stdc++.h>usin...原创 2018-04-12 18:07:39 · 2861 阅读 · 1 评论 -
【POJ3126】Prime Path(预处理+BFS)
题面:【POJ3126】Prime Path这道题目要在解决问题之前先预处理出一个四位数的质数表,由于范围很小,只需要枚举1000~9999并用O(√n)的质数判断函数进行验证即可,当然,用线性筛或除余法也是可以的(此题时间充裕,不建议用MR素数判断)。然后便是一个BFS,对于当前数字,只要枚举每一个它能变成的质数,判断是否已操作过,若未操作过则将其加入队列即可。代码如下:#in...原创 2018-04-21 13:15:01 · 324 阅读 · 0 评论