タイトル説明
2つの整数LとRが与えられた場合、閉区間[L、R]で素数を持つ整数の数を見つけます。
(計算設定は、2進表現の1の数を表すことに注意してください。たとえば、21、10101の2進表現には、3つの計算設定があります。また、1は素数ではありません。
示例 1:
输入: L = 6, R = 10
输出: 4
解释:
6 -> 110 (2 个计算置位,2 是质数)
7 -> 111 (3 个计算置位,3 是质数)
9 -> 1001 (2 个计算置位,2 是质数)
10-> 1010 (2 个计算置位,2 是质数)
示例 2:
输入: L = 10, R = 15
输出: 5
解释:
10 -> 1010 (2 个计算置位, 2 是质数)
11 -> 1011 (3 个计算置位, 3 是质数)
12 -> 1100 (2 个计算置位, 2 是质数)
13 -> 1101 (3 个计算置位, 3 是质数)
14 -> 1110 (3 个计算置位, 3 是质数)
15 -> 1111 (4 个计算置位, 4 不是质数)
注意:
L、Rは、L <= Rで[1、10 ^ 6]の整数です。
R-Lの最大値は10,000です。
問題解決のアイデア
素数の判断:nが2-sqrt(n)の数で割り切れる
かどうかを確認し、素数でない場合は素数にすることはできません。桁数の判断:whileループは最小かどうかをカウントします。桁は1で、最下位の桁を継続的に更新します
コード
int prime(int n){
if(n<2)return 0;
int i=0;
for(i=2;i*i<=n;i++){
if(n%i==0)return 0;
}
return 1;
}
int countPrimeSetBits(int L, int R){
int result=0;
for(int i=L;i<=R;i++){
int count=0;
int temp=i;
while(temp){
count+=temp%2;
temp/=2;
} result+=prime(count);
}return result;
}