在 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