Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนเฉพาะนิวแมน-แชงกส์-วิลเลียมส์ (Newman-Shanks-Williams prime) ใน C++

โจทย์

ลำดับจำนวนเฉพาะนิวแมน-แชงกส์-วิลเลียมส์มีดังนี้

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