这个问题包括打印前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中文网其他相关文章!