204. 計數質數
阿新 • • 發佈:2020-07-29
題目
統計所有小於非負整數 n 的質數的數量。
示例:
輸入: 10
輸出: 4
解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。
解題思路
採用排除法的思想
1:比2大的偶數一定不是質數
2:從2開始的任意一個數x,x乘一個>=2的整數得到的數字一定不是質數
步驟
1.首先把一半的偶數排除掉count = n/2; 這裡並不會把2這個特立給排除,因為1代替了2當質數(或者說1代替2被排除)
2. 排除3 * 3 3 * 4 3 * 5 ..................(為啥從3開始,因為2的倍數的是偶數,在第一步就已經全部排除了)
5 * 5 5 * 7 ...................
程式碼
class Solution { public int countPrimes(int n) { if(n<=2) return 0 ; //①把偶數的排掉——————由思路1知 //count指質數個數 int count = n/2; //true表示不是質數 , false表示是質數 boolean[] flag = new boolean[n]; //②因為count=n/2已經把偶數給排除掉了,所以這個i=i+2,排除剩下奇數中不是質數的就行 for(int i = 3 ; i<=Math.sqrt(n) ;i+=2){ //已經判斷為質數了,continue判斷下一個數字 if(flag[i]) continue; //例如: 3*3 3*5 3*7 ........這些數字肯定不是質數 ————由思路2知 for(int j = i*i;j<n;j+=i*2){ if(!flag[j]){ //不是質數 flag[j]=true; //排除,質數數量-1 count--; } } } return count; } }