ที่นี่เราจะดูว่าตัวเลขเป็น Bleak หรือไม่ มีการกล่าวกันว่าตัวเลขจะเยือกเย็นหากไม่สามารถแสดงเป็นผลรวมของจำนวนบวก x และตั้งค่าการนับบิตใน x ได้ ดังนั้น x + set_bit_count(x) จึงไม่เท่ากับ n สำหรับจำนวนที่ไม่ใช่ค่าลบ x
แนวคิดนี้ง่ายมาก หากจำนวนบิตที่ตั้งไว้ + ตัวเลขไม่เหมือนกับตัวเลข แสดงว่าเป็น "เยือกเย็น" ไม่เช่นนั้นจะไม่ใช่
ตัวอย่าง
#include <iostream>
using namespace std;
int set_bit_count(int x) {
unsigned int bit_count = 0;
while (x != 0) {
x &= (x - 1);
bit_count++;
}
return bit_count;
}
bool isBleakNumber(int n) {
for (int i = 1; i < n; i++)
if (i + set_bit_count(i) == n)
return false;
return true;
}
int main() {
isBleakNumber(3) ? cout << "Yes\n" : cout << "No\n";
isBleakNumber(4) ? cout << "Yes\n" : cout << "No\n";
} ผลลัพธ์
No Yes