這個問題包含列印前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中文網其他相關文章!