线性筛法 与 线性求欧拉函数 的计算模板
生活随笔
收集整理的這篇文章主要介紹了
线性筛法 与 线性求欧拉函数 的计算模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
懂得如何快速計算質數是十分重要的
在篩法的基礎上,我們可以使用更為高級的線性篩法!
顧名思義,就是時間復雜度是線性的,即 O(N) ,N 為所求的質數范圍
而對編程有所接觸的人,應該都知道歐拉函數 即 φ(N)
聽起來高大上,其實就表示 小于等于 N 的數中與 N 互質的數的數目
這在競賽中用處很大,變式也很多—— ~不明覺厲~
那么如何在 線性時間 內求出 1—N 中的 質數表 和 歐拉函數表 呢?
下面給出兩個算法的模板——
線性篩法
這個算法的本質就是在篩法的基礎上,加上一個不再重復篩的退出語句
模板如下:
- 注釋:標志數組為 bz[N] , 質數表為 f[N] 。
線性求歐拉函數
這個算法的本質就是在篩法的基礎上,根據歐拉函數的積性性質來處理
模板如下:
- 注釋:標志數組為 bz[N] , 質數表為 f[N] , 歐拉函數表為 phi[N] 。
總結
這兩個算法有兩個優點:
短小精悍
復雜度線性,O(N) 處理
所以在以后的學習中,應熟練掌握這兩種算法!
總結
以上是生活随笔為你收集整理的线性筛法 与 线性求欧拉函数 的计算模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JZOJ 3809. 【NOIP2014
- 下一篇: JZOJ 3804. 【NOIP2014