題目:求2~100以內的素數。
素數(prime number),又稱質數,是指乙個大於1的自然數,除了1和它本身外,不能被整除以其他自然數。
解法一:根據素數的定義,即用該數除比其小的數(1除外)都不能除盡,即為素數
public class prime
if(i == n)system.out.print(n+" ");
}}解法二:用math.sqrt(),即用該數n除2~math.sqrt(n)之間的數,都不能除盡,為素數
public class prime
if(i > x)system.out.print(n+" ");
}}解法三:埃氏篩法
給出要篩數值的範圍n,找出以內的素數。先用2去篩,即把2留下,把2的倍數剔除掉;再用下乙個質數,也就是3篩,把3留下,把3的倍數剔除掉;接下去用下乙個質數5篩,把5留下,把5的倍數剔除掉;不斷重複下去……。
基本思想:素數的倍數一定不是素數
實現方法:prime用來儲存素數,p是素數的個數
is_prime用來儲存是否為素數的標記,true為素數,false為合數
public class prime
return true;
}public static void main(string args)
}for(int i = 0;i < p;i++)
system.out.print(prime[i]+" ");
}
埃氏篩法 素數篩
埃式篩法 給定乙個正整數n n 10 6 問n以內有多少個素數?做法 做法其實很簡單,首先將2到n範圍內的整數寫下來,其中2是最小的素數。將表中所有的2的倍數劃去,表中剩下的最小的數字就是3,他不能被更小的數整除,所以3是素數。再將表中所有的3的倍數劃去 以此類推,如果表中剩餘的最小的數是m,那麼m...
素數篩法(埃氏篩,線性篩)
時間複雜度o nloglogn void prime int b prime i 1則是合數 原理很簡單,所有合數可以表示為乙個質數跟另乙個數的積,列舉每個已知素數的倍數就能標記完。但很明顯,這樣做會有重複。比如12 3 4 2 6,在2這個素數進行倍數標記時會標記,在3這個素數進行倍數標記時同樣會...
埃氏篩法和線性篩法求素數
演算法中有一類題,題目中涉及到大量素數的判定,只要範圍確定,素數的個數和素數就已經是固定不變的,那麼我們可以考慮先預處理,把範圍內所有素數篩選出來,那麼篩素數的方法有哪些,下面就兩種演算法的思想和標程進行說明。一 埃氏 eratosthenes 篩素數。原理 基於任意整數x的倍數2x,3x,4x,都...