ในปัญหานี้ เราได้รับตัวเลข N หน้าที่ของเราคือ หาเลข n-th ที่เป็นจำนวนเฉพาะ (2, 3, 5 และ 7) เท่านั้น .
อนุกรมที่ประกอบด้วยตัวเลขเฉพาะ (2, 3, 5, 7) คือ 2, 3, 5, 7, 22, 23, 25, 27, 32, 33...
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
Input: N = 6 Output: 23
แนวทางการแก้ปัญหา
แนวทางง่ายๆ ในการแก้ปัญหาคือ การหาตัวเลขจากดัชนีที่กำหนด เช่น การหาพจน์ของอนุกรมนี้ เราจะดูอนุกรมกัน
เรามีเลขจำนวนเฉพาะที่แตกต่างกันสี่ตัว ดังนั้นอนุกรมที่สร้างขึ้นจึงสามารถใช้เป็นระบบตัวเลขสี่หลักได้ ในระบบตัวเลขนี้ เรามีจำนวน 4x ของความยาว x
ตอนนี้เพื่อแก้ปัญหา เรามีชุดข้อมูลที่เราจะหาความยาว o ตัวเลขที่ทำให้พวกเขาสร้างตัวเลขได้ จากนั้นเราจะนับเลข N และพิมพ์ตัวเลขที่ต้องการ
ในการหาจำนวนที่ N โดยใช้ความยาว เราจะนับจากจำนวนความยาวตัวแรก (x-1) แล้วนับ N นี้
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <iostream> #include <math.h> using namespace std; void findNthNumber(int n){ long x = 1; long lastNum = 0; while (true) { long currNum = lastNum + pow(4, x); if (lastNum < n && currNum >= n) break; x++; lastNum = currNum; } for (int i = 1; i <= x; i++) { for (long j = 1; j <= 4; j++) { if (lastNum + pow(4, x - i) < n) lastNum += pow(4, x - i); else { if (j == 1) cout<<"2"; else if (j == 2) cout<<"3"; else if (j == 3) cout<<"5"; else if (j == 4) cout<<"7"; break; } } } } int main(){ int N = 32; cout<<N<<"th number made of prime digits is "; findNthNumber(N); return 0; }
ผลลัพธ์
32th number made of prime digits is 257