โจทย์
ลำดับจำนวนเฉพาะนิวแมน-แชงกส์-วิลเลียมส์มีดังนี้
1, 1, 3, 7, 17, 41...
หากเราทำให้ลำดับนี้เป็นทั่วไป เราจะได้
a0=1 a1=1 an=2*a(n-1)+a(n-2)
อัลกอริธึม
- กำหนดตัวเลข n
- กำหนดตัวเลขแรกของลำดับ 1 และ 1
- เขียนลูปที่วนรอบจนถึง n
- คำนวณตัวเลขถัดไปโดยใช้ตัวเลขก่อนหน้า
- อัปเดตตัวเลขก่อนหน้าสองตัว
- คืนค่าตัวเลขสุดท้าย
การนำไปใช้งาน
ต่อไปนี้เป็นการนำไปใช้งานของอัลกอริธึมข้างต้นใน C++
#include <bits/stdc++.h>
using namespace std;
int getNthTerm(int n) {
if(n == 0 || n == 1) {
return 1;
}
int a = 1, b = 1;
for(int i = 3; i <= n; ++i) {
int c = 2 * b + a;
a = b;
b = c;
}
return b;
}
int main() {
int n = 5;
cout << getNthTerm(n) << endl;
return 0;
}
ผลลัพธ์
หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้
17