首頁 >後端開發 >C++ >斯馬蘭達切-韋林序列

斯馬蘭達切-韋林序列

王林
王林轉載
2023-09-09 11:45:03837瀏覽

斯馬蘭達切-韋林序列

這個問題包含列印前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刪除