Problem: 762. 二进制表示中质数个计算置位
解题过程
log2计算二进制长度,然后统计1个数,查看集合是否是素数,计算是否是素数,若是则放入集合
Code
class Solution { public: int countPrimeSetBits(int left, int right) { int len, num, cnt = 0, tmp; unordered_set<int> primes; primes.insert(2); primes.insert(3); primes.insert(5); for(int i = left; i <= right; i++) { len = log2(i) + 2; bool isprime = true; num = 0; tmp = i; while(len--) { if((tmp&1)==1) { num++; } tmp = tmp >> 1; } if(num==1) continue; if(primes.find(num)!=primes.end()) { cnt++; continue; } for(int j = 2; j * j <= num; j++) { if(num%j==0) { isprime = false; break; } } if(isprime == true) { cnt++; primes.insert(num); } } return cnt; } };