首页 > 后端开发 > C++ > 正文

斯马兰达切-韦林序列

王林
发布: 2023-09-09 11:45:03
转载
825 人浏览过

斯马兰达切-韦林序列

这个问题包括打印前m个Smarandache-Wellin序列的项,其中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数。例如,

INPUT: N=4

输出:2 23 235 2357

Explanation: 这是由前4个连续质数分别形成的Smarandache-Wellin序列的前四个数字。

输入:N=7

输出:2 23 235 2357 235711 23571113 2357111317

解释:Smarandache-Wellin序列的第i个项是前i个连续的质数的连接,其中i大于等于1且小于等于7。

算法

这种方法可能就像它看起来的那样简单。我们知道Smarandache-Wellin序列的第N个项是前N个连续质数的连接。

因此,找出前N个连续的质数将为我们提供Smarandache-Wellin序列的前N个Smarandache-Wellin数,通过进一步连接每个第i个项的I个连续质数。我们可以按照以下步骤找出前N个质数 -

  • 为了存储素数的计数以获得前N个连续的素数,我们将创建一个变量。

  • 使用循环检查数字是否为素数,直到计数等于N,以获取前N个素数。如果是素数,我们将素数计数增加1。

  • 为了确定一个数是不是质数,我们将通过一个for循环迭代,从i=2开始,直到这个数小于或等于它的平方根。如果这个数能被其他数整除,那么它不是质数,因为质数只有两个因数,即这个数本身和1。

  • 根据数学,一个合数总是包含至少一个小于该数的平方根的因子。因此,为了确定一个数是否为质数,我们只需迭代直到该数的平方根。

通过这种方式,从2开始逐个检查,直到素数的数量等于N,我们可以得到前N个连续的素数,并将它们存储在数组中。

问题的下一个任务是打印Smarandache-Wellin序列的前N个项,这个任务非常简单。我们可以使用嵌套循环,并迭代存储了前N个连续质数的数组来实现。我们将在一个循环中从0到数组的大小迭代,然后在一个嵌套循环中从0到i迭代,并打印所有质数,直到i,通过这种方式我们可以实现对于每个第i个项的前i个连续质数的连接。

方法

我们可以通过以下步骤获得所需的输出−

  • 要检查一个数字是否为质数,请创建一个函数。

  • 创建另一个函数,在其中将前N个质数存储在一个数组中,并使用该数组连接前j个连续的质数以获得第j个项。

  • 声明一个名为count的变量来计算素数的数量。并且在count等于N之前,从2开始检查每个数字是否是素数。如果是素数,则将其存储在我们创建的数组中。

  • 对于每个项的前N个所需的质数的连接,我们将使用嵌套的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),因为我们要检查每个数字是否为质数,直到N为止。

空间复杂度:O(N),因为我们使用了大小为N的数组。

结论

在本文中,我们学习了Smarandache-Wellin序列及其背后的概念。使用高效的算法,我们还看到了如何在C++中打印Smarandache-Wellin序列的前N个项。

我希望您在阅读本文时能够清楚地理解有关问题的所有概念。

以上是斯马兰达切-韦林序列的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:tutorialspoint.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板