Likou762。バイナリ表現で素数計算を設定する

タイトル説明

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;

}

リンク

おすすめ

転載: blog.csdn.net/qq_44722674/article/details/111901124