首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python|欧拉求质数

这个时候就可以使用来求质数,本文介绍的是欧拉。其运用的原理是质数的倍数一定不是质数。因此将质数的倍数直接标记成合数,以达到筛选质数的目的。...同样以此为思路的还有埃氏,但埃氏具有缺陷:对于一个合数,有可能被多次,例如20 = 2*10 = 4*5。...而对此进行改进,用合数的最小质因子进行筛选来确保每个合数只被筛选一次,这就是欧拉。 但是具体是怎么做到每个合数只被筛选一次,我们来看下面的代码。...例如:i=2筛选4,i=3筛选6和9,但到i=4的时候,prime先为2,掉8,但运行到I % prime == 0这一步的时候就直接break了,也就避免了再遍历prime = 3的时候掉12,而...12是由i = 6时,prime = 2时掉。

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

素数的

素数的有很多种 在此给出常见的三种方法 以下给出的所有代码均已通过这里的测试 埃拉托斯特尼 名字好长 :joy:  不过代码很短 思路非常简单,对于每一个素数,枚举它的倍数,它的倍数一定不是素数...看来这种算法还是不够优秀 下面我们来探索一下他的优化 另外,这种算法的时间复杂度:$O(n*logn)$ 埃拉托斯特尼优化版 根据唯一分解定理 每一个数都可以被分解成素数乘积的形式 那我们枚举的时候...果然,加了优化之后这种算法快了不少 可以证明,它的复杂度为: 这种算法已经非常优秀了,但是对于 这种极端数据,还是有被卡的风险 那么,还有没有更快的呢? 答案是肯定的!...欧拉 我们思考一下第二种的运算过程 不难发现,对于6这个数,它被2了一次,又被3了一次 第二次显然是多余的, 我们考虑去掉这步运算 1 #include 2 #include...时间复杂度:严格 总结 在一般情况下,第二种已经完全够用。 第三种的优势不仅仅在于速度快,而且还能够积性函数,像欧拉函数,莫比乌斯函数等。 这个我以后还会讲的

1.3K60

欧拉(线性)的学习理解

在数论的学习中,我学到了埃氏,O(nloglogn)的算法,而在一些数据范围达到1e7这样的题目中,也很难让人满意,于是我便学习了欧拉,也即 O(n)的线性。...埃氏 埃氏的基本思想 :从2开始,将每个质数的倍数都标记成合数,以达到筛选素数的目的。...埃氏的缺陷 :对于一个合数,有可能被多次。例如 30 = 2 * 15 = 3 * 10 = 5*6……那么如何确保每个合数只被筛选一次呢?我们只要用它的最小质因子来筛选即可,这便是欧拉。...欧拉 欧拉的基本思想 :在埃氏的基础上,让每个合数只被它的最小质因子筛选一次,以达到不重复的目的。...因为欧拉的原理便是通过最小素因子来消除。 结语 对于欧拉的学习是先从接触到题开始的,研究了一天才弄懂,很惭愧,再次遇到题也不见得可以游刃有余的解决,在此与大家共勉,学海无涯。

1.1K20

浅谈积性函数的线性

前置知识 数论函数及相关基本定义 素数的线性 线性 线性可以在严格$O(n)$的时间内出积性函数的值, 它有常见的套路 假设$n = p_1^{a_1} p_2^{a_2} \dots p_k^...p_i)$和$f(p_i^{k+1})$的取值,那么直接套板子就行了 在下文中如无特殊说明,默认$p_i$表示$n$质因数分解之后第$i$个质数,$a_i$表示$p_i$的指数 常见的有以下几种 线性素数...GetSumD(1e3); for(int i = 1; i <= tot; i++) printf("%d ", SD[i]); return 0; } 非常见积性函数的...很多情况下我们会遇到求两个积性函数狄利克雷卷积的情况 很显然,这个函数也是积性函数,我们考虑如何求得 为了方便,我们需要把问题无限简化, 设$low(i)$表示$p_1^{a_1}$ 考虑中最关键的地方...线性约数个数和、约数和 线性,积性函数,狄利克雷卷积,常见积性函数的

53920
领券