ตัวเลขอัจฉริยะคือตัวเลขที่มีตัวประกอบเฉพาะที่แตกต่างกันอย่างน้อยสามตัว คุณจะได้รับหมายเลข N ค้นหาตัวเลขอัจฉริยะตัวที่ n
ชุดเลขอัจฉริยะคือ
30, 42, 60, 66, 70, 78...
อัลกอริทึม
- เริ่มต้นหมายเลข N.
- เริ่มต้นการนับเป็น 0
- เขียนฟังก์ชันที่ตรวจสอบว่าจำนวนที่กำหนดเป็นจำนวนเฉพาะหรือไม่
- เขียนฟังก์ชันที่ตรวจสอบว่าตัวเลขนั้นฉลาดหรือไม่
- เขียนลูปที่วนซ้ำจาก 30 เนื่องจากตัวเลขอัจฉริยะตัวแรกคือ 30
- ตรวจสอบว่าตัวเลขปัจจุบันเป็นตัวเลขอัจฉริยะหรือไม่โดยใช้ฟังก์ชันจำนวนเฉพาะ
- เพิ่มจำนวนขึ้น 1 เมื่อคุณพบตัวเลขอัจฉริยะ
- คืนเลขอัจฉริยะเมื่อคุณนับเท่ากับ N
การนำไปใช้
ต่อไปนี้เป็นการนำอัลกอริธึมข้างต้นไปใช้ใน C++
#include<bits/stdc++.h> using namespace std; bool isPrime(int n) { if (n < 2) return false; for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) return false; } return true; } bool isSmartNumber(int n) { int count = 0; for (int i = 2; i < n; i++) { if (n % i == 0 && isPrime(i)) { count += 1; } if (count == 3) { return true; } } return false; } int getNthSmartNumber(int n) { int i = 30, count = 0; while (true) { if (isSmartNumber(i)) { count += 1; } if (count == n) { return i; } i += 1; } } int main() { int N = 25; cout << getNthSmartNumber(N) << endl; return 0; }
ผลลัพธ์
หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้
174