演算法 質數,質因數,篩質數

2021-10-25 22:28:42 字數 1263 閱讀 5364

質數在大於1的整數中,如果只包含1和本身這兩個約數,就被稱為質數,或者叫素數。

有3中形式

由於sqrt()計算較慢。(不推薦)。

bool

is_prime

(int n)

由於i*i有可能會大於n,而當n較大時,可能會爆int,從而成為負值。(不推薦)

bool

is_prime

(int n)

推薦 —— 試除法

bool

is_prime

(int n)

質因數是指能整除給定正整數的質數。

正整數的因數分解可將正整數表示為一連串的質因子相乘,質因子如重複可以用指數表示。

n中最多隻包含乙個大於n

\sqrt

n​的質因子

void

divide

(int x)

printf

("%d %d\n"

, i, s);}

if(n >1)

printf

("%d %d\n"

, n,1)

;printf

("\n");

}

要求出從1到n中所有的質數的個數

思路是將從2到n中質數的倍數全部刪去。剩下的就是質數。

埃氏篩法

o (n

logl

ogn)

o(nlog})

o(nlog

logn

)

void

get_prime

(int x)

} cout << idx << endl;

}

線性篩法

原理:n只會被最小質因子篩掉

由於當i模primes[j]等於0時就結束,則primes[j]一定是i的最小質因子

i % pj == 0

pj 一定是i的最小質因子,pj一定是pj * i 的最小質因子。

i % pj != 0

pj一定小於i的所有質因子,pj也一定是pj*i的最小質因子。

任何乙個合數x,假設pj是x的最小質因子,當i列舉到x/pj的時候就會被篩掉

void

get_prime()

}}

數學知識 質數(質數的判定 分解質因數 篩質數)

在大於1的整數中,如果只包含1和她本身這兩個約數,那麼這個整數被稱為質數。給定n個正整數ai,判定每個數是否是質數。輸入格式 第一行包含整數n。接下來n行,每行包含乙個正整數ai。輸出格式 共n行,其中第 i 行輸出第 i 個正整數ai是否為質數,是則輸出 yes 否則輸出 no 資料範圍 1 n ...

演算法刷題 數論 質數的判定 分解質因數 篩質數

質數 在大於1的整數中,如果只包含1和它本身這兩個約數,那麼這個數就稱為質數。判斷質數最暴力的寫法,按照質數的定義 看是否有其他的因子。最樸素的暴力的時間複雜度o n 時間複雜度o n bool isprime int n 質數的判定 試除法 優化 列舉到n sqrt n 因為因數都是成對出現的,如...

質數篩以及質因數分解

今天正式學了一遍質數篩 已經可以打線性的質數篩了!以及質因數分解,要做乙個小小的總結。質數 除了1和它本身沒有其他的因數,一般指的都是正整數。篩法 篩法是一種簡單檢定素數的演算法。篩法的具體做法 給出要篩數值的範圍n,找出n以內的素數p1,p2,p3,pk。先用2去篩,即把2留下,把2的倍數剔除掉 ...