判斷素數(判斷乙個數是不是素數):
最常用解法---sqrt(n)
1int prime(intn)2
13return1;
14}15 }
找規律優化版,更快
1int prime(intn)2
14return1;
15}16 }
篩選素數(判斷某個範圍內所有數是不是素數,或找出所有素數。其實用判斷素數迴圈一遍也行,尤其是有了第二個優化判斷素數迴圈一遍好像比線篩更快!):
埃氏篩選法(又稱翻倍法)---n*loglogn
prime陣列儲存得到的素數;check陣列:0表示素數,1合數
1void ass(intm)2
12for(int j=i+i;j<=m;j+=i)
1316
}17 }
但有的數字是多個素數的倍數,也就是說它可能會被重複計算多次,比如說6同時是2與3的倍數,它在計算時就被訪問了兩次,這樣會導致效率低下,所以在下面的演算法便優化了這種情況。
歐式篩選法(真正線篩)---n
相當於對埃氏篩的優化,優化了重複計算的篩,使之只被篩一次
1void 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位以上 如果採用上次的試除法來判定,那麼可能要窮盡你一生的時間都還不夠。所以在一般的應...