線性篩及其應用

2021-08-04 14:21:39 字數 1094 閱讀 3283

素數的線性篩法

is_prime記錄當前下標的數是不是乙個素數

第一次篩掉2的倍數 第二次篩掉3的倍數 以此。。。

當然如果我現在要篩掉14的倍數,一定是篩2*14 3*14 5*14 7*14。。。篩到7就可以停了 比7大的素數比如11 11*14=11*2*7=(11*2)*7 在22這個數的時候會被篩到的 不需要在14的時候就篩到,這樣可以保證不會重複

對於乙個質數合數 可能能被表示稱乙個更大的合數乙個更小的質數

我們只要保證每次被乘的質數小 就行了。

#include 

#include

#include

using

namespace

std;

const

int maxn=300;

bool is_prime[maxn];

int prime[maxn];

int get_prime()

for(int j=0;j0;

if(i%prime[j]==0) break;}}

return cnt;

}int main()

莫比烏斯。。。。就比線性篩多一句話

#include 

#include

#include

using

namespace

std;

const

int maxn=2000;

bool is_prime[maxn];

int prime[maxn];

int miu[maxn];

void calc(int limit)

for(int j=0;prime[j]*i<=limit&&j0;

if(i%prime[j]==0) break;

else miu[prime[j]*i]=-miu[i];//此時滿足兩數互質 miu[prime[j]*i]=miu[prime[j]]*miu[i] miu[prime[j]]=-1 化簡得}}

}int main()

return

0;}

線性篩及其擴充套件應用

好久沒寫部落格了。不過noip的努力一直沒有停止過 今天學習了線性篩的擴充套件,正好時間有空,就來寫部落格了 線性篩思路還是比較簡單,即保證每個數隻被它最小的因數篩去一次,先看裸的 includeusing namespace std const int maxn 1000010 int pri m...

jzp線性篩及其簡單應用

前言 很久以前看過了線性篩,沒怎麼注意原理,但是後來發現線性篩還有很有用的。比如上次做的一道題就需要找出每個數的最小質因子,先篩再找就太慢了。一看線性篩發現就可以直接在篩的過程中處理出來了!今天又學習了屌炸天的jzp線性篩,可以在o n 的時間內求出尤拉函式,莫比烏斯函式等積性函式 原理 首先jzp...

線性篩法的應用

by qw 線性篩法最基礎的功能就是求 1,n 中的素數,以此為基礎,可以對他進行一些變形。變形後的線性 篩法可以實現許多其他的功能。下文中的tot均指一定區間內的質數個數 先看一道簡單的問題 求 1,n 中的m個數的最大質因子的序數 hdoj2136 這個問題可以利用線性篩法打乙個質數表,然後二分...