簡體   English   中英

查找素數?

[英]Find a prime number?

為了找出N是素數,我們只需要查找小於或等於sqrt(N)的所有數。 這是為什么? 我正在編寫一個C代碼,試圖理解它背后的原因。

N是素數,如果它是一個正整數,它可以被正整數兩個正整數1和N整除。由於數的除數不能大於這個數,這就產生了一個簡單的素數測試:

  • 如果大於1的整數N不能被[2, N-1]范圍內的任何整數整除,則N是素數。 否則,N不是素數。

但是,修改此測試以使其更快會很好。 所以讓我們調查吧。

注意,N的除數成對出現。 如果N可以被數字M整除,那么它也可以被N / M整除。 例如,12可以除以6,因此也可以除以2.此外,如果M >= sqrt(N) ,則N/M <= sqrt(N)

這意味着如果沒有小於或等於sqrt(N)的數字除N,則沒有大於sqrt(N)的數字除以N(除了1和N本身),否則會產生矛盾。

所以我們有一個更好的測試:

  • 如果大於1的整數N不能被[2, sqrt(N)]范圍內的任何整數整除,則N為素數。 否則,N不是素數。

如果你考慮上面的推理,你應該看到通過這個測試的數字也通過了第一次測試,並且未通過這個測試的數字也沒有通過第一次測試。 因此測試是等效的。

一個復合數(一個非素數,或1)至少有一對因子,並保證每對中的一個數字小於或等於數字的平方根(這就是你正在詢問)。

如果你對數字的平方根進行平方,你得到數字本身( sqrt(n) * sqrt(n) = n ),所以如果你把一個數字做得更大(比sqrt(n) )你必須要做另一個較小。 如果您只檢查數字2到sqrt(n)您將檢查所有可能的因素,因為每個因素都將與一個大於sqrt(n)的數字配對(當然,如果數字是實際上是一個其他數字的正方形,如4,9,16等......但這並不重要,因為你知道它們不是素數;它們很容易被sqrt(n)本身考慮在內。

原因很簡單,任何大於sqrt的數字都會導致另一個乘數小於sqrt。 在這種情況下,您應該已經檢查過它。

n = a × b是復合的。

假定一個 > SQRT(n)B> SQRT(N)。

a × b > sqrt( n )×sqrt( n

a × b > n

但是我們知道a × b = n ,因此 <sqrt( n )或b <sqrt( n )。

由於您只需要知道ab來顯示n是復合的,您只需要檢查最多為sqrt( n )的數字以找到這樣的數字。

因為在最壞的情況下,數字n可以表示為2

如果數字可以不同地表示,那么除數之一將小於a = sqrt(n) ,但另一個可以更大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM