ตัวเลขอัจฉริยะคือตัวเลขที่มีตัวประกอบเฉพาะที่แตกต่างกันอย่างน้อยสามตัว คุณจะได้รับหมายเลข 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