762.二进制表示中质数个计算置位

93 阅读1分钟

题目:
给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数。

计算置位位数 就是二进制表示中 1 的个数。
算法:
方法一:模拟
注意0和1不是素数

func countPrimeSetBits(left int, right int) int {
	cnt := 0
	for i := left; i <= right; i ++ {
		if isPrime(onesCount(i)) {
			cnt ++
		}
	}
	return cnt
}

func isPrime(num int) bool {
	if num < 2 {
		return false
	}
	for i := 2; i * i <= num; i ++ {
		if num % i == 0 {
			return false
		}
	}
	return true
}

func onesCount(n int) int {
	cnt := 0 
	for n > 0 {
		n = n & (n - 1)
		cnt ++
	}
	return cnt
}