2진수 최적화, 규칙 찾기

fn main(){
    let number:u64=0b1111;
    let length:u32=64-number.leading_zeros();
    let mut caled_num:u64;
    let mut appear_count=[0;500];
    let mut value:usize;
    for i in 1..10000{
        caled_num=number+(i<<length);
        value=count(caled_num);
        appear_count[value]=appear_count[value]+1;
    }
    for i in 0..500{
        println!("{} is appear {} count.",i,appear_count[i])
    }
}
fn count(mut n:u64)->usize{
    let first:u64=n;
    let mut count:usize=0;
    while n>=first{
        count=count+1;
        if n&1==0{
            n=n>>1;
        }
        else{
            n=(n<<1)+n+1;
        }
    }
    count
}

1111로 시작할 때 규칙을 찾기 위해 몇 번째에 1로 갔는지 의 발생 횟수를 셌다.

2진수로 숫자를 표현하면, 10진수로 볼 때보다 규칙이 생긴다.

Last updated

Was this helpful?