Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm số thứ n gồm các chữ số nguyên tố (2, 3, 5 và 7) chỉ trong C ++

Trong bài toán này, chúng ta được cho một số N. Nhiệm vụ của chúng ta là chỉ tìm số thứ n gồm các chữ số nguyên tố (2, 3, 5 và 7) .

Dãy số chỉ gồm các chữ số nguyên tố (2, 3, 5, 7) là, 2, 3, 5, 7, 22, 23, 25, 27, 32, 33 ...

Hãy lấy một ví dụ để hiểu vấn đề,

Input: N = 6
Output: 23

Phương pháp tiếp cận giải pháp

Một cách tiếp cận đơn giản để giải quyết vấn đề là bằng cách tìm số ở chỉ số đã cho, tức là bằng cách tìm số hạng của chuỗi, vì điều này, chúng ta sẽ quan sát chuỗi.

Chúng ta có bốn số nguyên tố khác nhau nên dãy số được lập có thể được coi là một hệ thống số có bốn chữ số. Trong hệ thống số này, chúng ta có 4x số chiều dài x.

Bây giờ để giải quyết vấn đề, chúng ta có một chuỗi trong đó chúng ta sẽ tìm độ dài o các số khiến chúng tạo ra số. Sau đó, chúng tôi sẽ đếm số thứ N và in ra số lượng cần thiết.

Để tìm số thứ N bằng cách sử dụng độ dài, chúng ta sẽ đếm từ số độ dài đầu tiên (x-1) và sau đó đếm N này.

Ví dụ

Chương trình minh họa hoạt động của giải pháp của chúng tôi

#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;
}

Đầu ra

32th number made of prime digits is 257