演算法學習之素數

2021-07-22 11:09:30 字數 777 閱讀 8325

判斷是否是素數,素數又稱為質數,是大於1且除了本身沒有因數的自然數,如2,3,5,7,11等

演算法1:

bool isprime(int n)

int divisors,i;

divisors = 0;

for(int i=1;i<=n;i++)

if(n % i == 0) divisors++;

return (divisors == 2);

如果測試的數字是100000,那麼次演算法遍歷的次數就比較多,效率低下,這時候就需要考慮另外一種演算法

分析:步驟1,如果能被2整除肯定不是素數

步驟2,如果不能被2整除則判斷是否能被3,5,7等整除

步驟3,考慮到被測試數n如果能被d1整除,那麼假設n=d1*d2,如果d1=d2,那麼d1=sqrt(n);如果d1大於sqrt(n),那麼d2必然小於d1,所以遍歷的最大上限數隻需到sqrt(n)

步驟4,考慮到計算機sqrt(16)的結果要小於4,大概是3.99999999,所以sqrt(n)要加上1

演算法2:

bool isprime(int n)

int i,limit; 

if(n<=1)return (false);

if(n==2) return (true);

if(n%2==0) return (false);

limit = sqrt(n)+1;

for(i = 3;iif(n%i==0) return (false);

return (true);



演算法學習之素數環問題

1 n組成的素數環,素數環就是乙個陣列中後乙個數加前乙個數必須組成素數,a i a i 1 是素數,又因為是環狀所以,首末相加也要上素數即a 0 a n 1 是素數,因為是環狀所以會有很多重複的排列,我們要除去重複的排列,就要假定所有的排列都以1打頭。我們也是用回溯加剪枝來求素數環 include ...

演算法學習之插入演算法

插入演算法其實很簡單,其原理就像我們玩的撲克一樣 在桌子上放著一疊雜亂無序的撲克牌 相當於需要我們排序的初始化陣列 然後拿起第一張,放到左手上 只有一張,不需要排序的說 然後拿起第二張,從右往左進行比較大小,如果小,就放到第一張牌的左邊,如果大,就放到第一張牌的右邊 然後拿起第三張,同上,從右往左進...

演算法學習之演算法思想

演算法的英文名稱是algorithm,這個詞在1957年之前在webster s new world dictionary 韋氏新世界詞典 中還未出現,只能找到帶有它的古代涵義的較老形式的 algorism 算術 是指用阿拉伯數字進行算術運算的過程。在中世紀時,珠算家用算盤進行計算,而算術家用算術進...