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

การหาเลข n-th ที่เป็นจำนวนเฉพาะ (2, 3, 5 และ 7) ในภาษา C++ . เท่านั้น


ในปัญหานี้ เราได้รับตัวเลข 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