素數相關問題

2022-06-24 15:24:08 字數 779 閱讀 1060

判斷素數(判斷乙個數是不是素數):

最常用解法---sqrt(n)

1

int prime(intn)2

13return1;

14}15 }

找規律優化版,更快

1

int prime(intn)2

14return1;

15}16 }

篩選素數(判斷某個範圍內所有數是不是素數,或找出所有素數。其實用判斷素數迴圈一遍也行,尤其是有了第二個優化判斷素數迴圈一遍好像比線篩更快!):

埃氏篩選法(又稱翻倍法)---n*loglogn

prime陣列儲存得到的素數;check陣列:0表示素數,1合數

1

void ass(intm)2

12for(int j=i+i;j<=m;j+=i)

1316

}17 }

但有的數字是多個素數的倍數,也就是說它可能會被重複計算多次,比如說6同時是2與3的倍數,它在計算時就被訪問了兩次,這樣會導致效率低下,所以在下面的演算法便優化了這種情況。

歐式篩選法(真正線篩)---n

相當於對埃氏篩的優化,優化了重複計算的篩,使之只被篩一次

1

void oss(intm)2

12for(int j=1;j<=tot && i*prime[j]<=m;j++)//

優化精華1:只把與素數的積都篩掉

1319}20

}21 }

完。

python求解素數相關問題

證明乙個數是不是素數 def pd prime n if n 1 print 1既不是質數,也不是合數 return false i 2 is flag true while i i n if n i 0 is flag false i 1 if is flag print n return is ...

素數相關習題

素數定義 質數又稱素數。乙個大於1的自然數,除了1和它自身外,不能被其他自然數整除的數叫做質數 否則稱為合數 規定1既不是質數也不是合數 判斷乙個數n是不是素數,最簡單的方法就是直接遍歷,看看從2到n 1是否能夠整除n。如下 bool isprime int n return true 因為如果能找...

素數相關演算法(二)

素數演算法 二 上次討論了簡單的素數判定的演算法,不過這個演算法對於位數較大 一般小於108 的素數判定就顯得相當力不從心了。比如在素數目前最廣泛的應用領域 公共金鑰體系中,一般選擇的素數都是相當大的 通常在100位以上 如果採用上次的試除法來判定,那麼可能要窮盡你一生的時間都還不夠。所以在一般的應...