یک عدد صحیح نامنفی را زیبا مینامیم اگر هم مضربِ 3 باشد و هم در نمایش دودوییِ آن، دو رقمِ یکِ متوالی وجود نداشته باشد. مثلا عددِ 9 زیبا است چون هم مضربی از 3 است و هم در نمایش دودویی آن (1001)، هیچ دو رقم یکی مجاور نیستند. چند عدد زیبا در بازهی [0,1023] (شامل خود 0 و 1023) وجود دارد؟
پاسخ
گزینه (1) درست است.
تعداد اعداد n بیتی (0 تا 2n−1) که زیبا هستند را f(n) مینامیم. برای یافتن این تعداد، از رابطهای بازگشتی استفاده میکنیم.
برای محاسبهی تعداد اعداد زیبای n بیتی، ابتدا n−2 بیت اول را طوری مقداردهی میکنیم که دو بیت پشت سر هم 1 نداشته باشند، سپس 2 بیت آخر را طوری مقداردهی میکنیم که عدد حاصل به 3 بخشپذیر باشد. باقیماندهی دو بیت آخر به 3، با مشخص شدن سایر n−2 بیت تعیین میشود.
در این حالت اگر بیت قبلی 1 باشد، عدد حاصل زیبا نیست و باید تعداد این حالات را با استفاده از اصل متمم کم کنیم. در این حالت 4 بیت آخر عدد به شکل 0110 است که چون باقیمانده بر 3ی آن صفر است، n−4 بیت قبلی تشکیل یک عدد زیبا میدهند. پس تعداد این حالات برابر با f(n−4) است.
اگر تعداد روشهایی که میتوان n بیت را با صفر و یک مقداردهی کرد که دو بیت پشت سر هم 1 نداشته باشد، را g(n) بنامیم، برای به دست آوردن مقدار g(n)، کافی است مقدار بیت آخر را مشخص کنیم. اگر برابر با 0 باشد، بقیهی بیتها به g(n−1) حالت و اگر برابر با 1 باشد، بیت بعدی باید برابر با 0 و بقیهی بیتها به g(n−2) حالت انتخاب شوند. بنابراین میتوان نوشت:
g(n)=g(n−1)+g(n−2)
با شرایط اولیه: g(0)=1 و g(1)=2.
این رابطه برابر است با:
g(n)=Fib(n+1)
با Fib(0)=Fib(1)=1.
حال برای به دست آوردن f(n) طبق بررسیهای بالا داریم:
f(n)=g(n−2)−f(n−4)=Fib(n−1)−f(n−4)
با شرایط اولیه:
f(0)=f(1)=f(2)=1,f(3)=2
و برای مقادیر بیشتر:
f(4)=2,f(5)=4,f(6)=7,f(7)=11,f(8)=19,f(9)=30,f(10)=48
در نتیجه، از آنجا که 1023=210−1، پاسخ مسئله برابر با f(10)=48 است.