在 C++ 中查找仅由质数(2、3、5 和 7)组成的第 n 个数字

c++server side programmingprogramming更新于 2025/3/15 11:22:17

在这个问题中,我们给出了一个数字 N。我们的任务是查找仅由质数(2、3、5 和 7)组成的第 n 个数字

仅由质数(2、3、5、7)组成的系列是 2、3、5、7、22、23、25、27、32、33...

让我们举一个例子来理解这个问题,

输入:N = 6
输出: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<<"第 32 个由素数组成的数字是 ";
    findNthNumber(N);
    return 0;
}

输出

第 32 个由素数组成的数字是 257

相关文章