ที่นี่เราจะดูว่าตัวเลขเป็น 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