Smarandache-Wellin 序列
这个问题包括打印 Smarandache-Wellin 序列的前 m 项,其中 m 是任何正整数。我们将看到用 C++ 打印 Smarandache-Wellin 序列前 m 项的算法。但在那之前,我们必须了解 Smarandache-Wellin 序列。
一个Smarandache-Wellin 序列是由 Smarandache-Wellin 数构成的序列。Smarandache-Wellin 数是由连续素数连接而成的整数。前几个素数是 2, 3, 5, 7, 11, 13, 17, 19, 23……
该序列的第一个 Smarandache-Wellin 数是 2。
该序列的第二个数字是 23,它是前两个连续素数连接而成的。
该序列的第三个数字是 235,可以说它是前三个连续素数连接而成的。
同样,我们可以得出结论,Smarandache-Wellin 序列的第 m 项就是前 m 个连续素数的连接。假设我们想要第 6 个 Smarandache-Wellin 数,那么它将是前 6 个连续数字的连接,即 23571113。
在上述问题中,我们将得到一个正整数 N,我们的任务是打印 Smarandache-Wellin 序列的前 N 个 Smarandache-Wellin 数。例如:
输入:N=4
输出: 2 23 235 2357
解释:这些是由前 4 个连续素数分别构成的 Smarandache-Wellin 序列的前四个数字。
输入:N=7
输出: 2 23 235 2357 235711 23571113 2357111317
解释:Smarandache-Wellin 序列的每一项都是前 i 个连续素数的连接,其中 i 大于等于 1 且小于等于 7。
算法
这种方法可能和看起来一样简单。我们知道 Smarandache-Wellin 序列的第 N 项是前 N 个连续素数的连接。
因此,找出前 N 个连续素数,通过进一步连接每项的 i 个连续素数,就可以得到 Smarandache-Wellin 序列的前 N 个 Smarandache-Wellin 数。我们可以按照以下步骤找出前 N 个素数:
为了存储素数的数量以获得前 N 个连续素数,我们将创建一个变量。
使用循环检查数字是否是素数,直到计数等于 N 以获得前 N 个素数。如果它是素数,我们将把素数计数增加 1。
为了确定一个数字是否是素数,我们将迭代一个 for 循环,从 i=2 开始,直到该数字小于或等于其平方根。如果该数字能被任何其他数字整除,则它不是素数,因为素数只有两个因子,即该数字本身和 1。
根据数学原理,合数总是至少包含一个小于该数字平方根的因子。正因为如此,为了确定一个数字是否是素数,我们只需迭代到该数字的平方根。
通过这种方式,迭代直到素数计数等于 N,并检查从 2 开始的每个数字,我们可以得到前 N 个连续素数并将它们存储在数组中。
问题的下一个任务,即打印 Smarandache-Wellin 序列的前 N 项,非常简单。我们可以使用嵌套循环并在我们存储前 N 个连续素数的数组上进行迭代来实现这一点。我们将迭代一个从 0 到数组大小的循环,然后在另一个嵌套循环中从 0 到 i,打印所有直到 i 的素数,通过这种方式,我们可以实现每项前 i 个连续素数的连接。
方法
我们可以使用以下步骤获得所需输出:
编写一个函数来检查数字是否是素数。
编写另一个函数,我们将前 N 个素数存储在一个数组中,并使用该数组连接前 j 个连续素数以获得第 j 项。
声明一个名为 count 的变量来计算素数的个数。直到 count 等于 N,检查从 2 开始的每个数字是否是素数。如果它是素数,则将其存储在我们创建的数组中。
为了连接每一项所需的前几个素数,我们将使用嵌套 for 循环。这就是我们如何打印 Smarandache-Wellin 序列的前 N 项。
示例
使用上述算法解决问题的 C++ 代码:
#include <iostream> #include <bits/stdc++.h> using namespace std; //function to check if the number is a prime number or not bool check(int N){ for(int i= 2; i <=sqrt(N); i++){ //iterating to check if the number has any divisor other than 1 and number itself if(N % i == 0){ //if it has return false since it is not a prime number return false; } } return true; //return true if it satisfies all the conditions } //function to print first N terms of Smarandache-Wellin sequence //using an array to store first N consecutive prime numbers void ans(int N){ int ans[N]; int count=0; //to count number of prime numbers for(int i=2;count<N;i++){ //for storing first N consecutive prime numbers in the array if(check(i)){ ans[count]=i; //if the number is prime store it in the array count++; //increase count } else { continue; } } cout<<"The first "<<N<<" terms of Smarandache-Wellin sequence are: "; for(int i=0;i<N;i++){ //for printing first N terms of Smarandache-Wellin sequence for(int a=0;a<=i;a++){ //for concatenating first a prime numbers for ath term cout<<ans[a]; } cout<<" "; } cout<<endl; } int main(){ int N=6; ans(N); N=12; ans(N); return 0; }
输出
The first 6 terms of Smarandache-Wellin sequence are: 2 23 235 2357 235711 23571113 The first 12 terms of Smarandache-Wellin sequence are: 2 23 235 2357 235711 23571113 2357111317 235711131719 23571113171923 2357111317192329 235711131719232931 23571113171923293137
时间复杂度:O(N*logN),因为我们正在检查从 2 到 N 的每个数字是否是素数。
空间复杂度:O(N),因为我们使用了大小为 N 的数组。
结论
在本文中,我们学习了 Smarandache-Wellin 序列及其背后的概念。我们还使用有效的算法了解了如何在 C++ 中打印 Smarandache-Wellin 序列的前 N 项。
我希望本文能帮助您理解所有关于这个问题的概念。