1. 程式人生 > >【LeetCode】 762. 二進位制表示中質數個計算置位

【LeetCode】 762. 二進位制表示中質數個計算置位

1.題目

給定兩個整數 L 和 R ,找到閉區間 [L, R] 範圍內,計算置位位數為質數的整數個數。
(注意,計算置位代表二進位制表示中1的個數。例如 21 的二進位制表示 10101 有 3 個計算置位。還有,1 不是質數。)

2.思路

step1:把L到R的數字依次換算成二進位制
step2:把二進位制數中的1統計出來,c
step3:判斷c是不是素數

3.程式碼

class Solution {
public:
   bool isprime(int n){
	if(n==1||n==0)
		return false;
	else{
		for
(int i=2;i<=n/2;i++){ if(n%i==0) return false; } return true; } } int countPrimeSetBits(int L, int R){ int res=0; for(int i=L;i<=R;i++){ int div=i; int c=0; while(div){ int j=div%2; if(j==1) c++; div/=2; } if(isprime(c)) res++; } return res; } };

4.優秀案例

class
Solution { public: int countPrimeSetBits(int L, int R) { int count = 0; //質數的個數 int data; //計算置位的一箇中間值 int n; //計算置位 bool isRight; //int prime[] = {2, 3, 5, 7, 11, 13, 17, 19}; for(int i =
L; i <= R; i++) { data = i; n = 0; isRight = true; while(data != 0) { n++; data = (data & (data - 1)); } if(n == 1 || n == 0) { isRight = false; } for(int j = 2; j < n; j++) { if(n % j == 0) { isRight = false; break; } } if(isRight) { count++; } } return count; } };