โจทย์
เลขสุภาพ (Polite number) คือจำนวนบวกที่สามารถเขียนเป็นผลรวมของจำนวนบวกติดต่อกัน 2 ตัวขึ้นไป
ลำดับของเลขสุภาพคือ
3 5 6 7 9 10 11 12 13 14...
มีสูตรสำหรับหาเลขสุภาพลำดับที่ n สูตรคือ n + log2(n + log2(n)) ฟังก์ชัน log เริ่มต้นคำนวณด้วยฐาน e เราต้องคำนวณด้วยฐาน 2 แบ่งผลลัพธ์ log เริ่มต้นด้วย log(2) เพื่อให้ได้ค่า log ฐาน 2
อัลกอริธึม
- อัลกอริธึมสำหรับหาเลขสุภาพลำดับที่ n เป็นเรื่องตรงไปตรงมา
- กำหนดตัวเลข N
- ใช้สูตรข้างต้นเพื่อคำนวณเลขสุภาพลำดับที่ n
- อย่าลืมเพิ่มค่า n ขึ้น 1 ก่อนคำนวณเลขสุภาพลำดับที่ n
การนำไปใช้งาน
ต่อไปนี้เป็นการนำไปใช้งานของอัลกอริธึมข้างต้นใน C++
#include <bits/stdc++.h>
using namespace std;
double getNthPoliteNumber(double n) {
n += 1;
return n + (log((n + (log(n) / log(2.0))))) / log(2.0);
}
int main() {
double n = 10;
cout << (int)getNthPoliteNumber(n) << endl;
return 0;
}
ผลลัพธ์
หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้
14