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?