Go 語言程式,用於查詢陣列中的素數


在本教程中,我們將展示如何使用不同的示例從陣列中查詢素數。素數是指只能被 1 或自身整除的數,它們除了這兩個因子之外沒有其他因子。現在,我們將向您展示一些示例,以幫助您瞭解此程式背後的邏輯。

方法 1:在主函式中查詢素數

在這種特定方法中,我們將藉助巢狀 for 迴圈列印素數。在每次內部迭代中,我們將陣列元素減半,並檢查它們是否可以被其他數字整除。讓我們來看一看並理解它。

演算法

步驟 1 − 建立一個包 main,並在程式中匯入 fmt 包。

步驟 2 − 建立一個 main 函式來執行程式,並在 main 函式中進一步建立一個數組,從中搜索素數。

步驟 3 − 在 main 中建立一個名為 flag 的變數,初始值為 0。

步驟 4 − 執行一個迴圈,從 i=2 到 i<=len(arr)-1,此迴圈為外迴圈,j=2 到 j<arr[i]/2 為內迴圈,內迴圈將在外迴圈的每次迭代中執行。

步驟 5 − 當外迴圈開始時初始化 flag=0,並在內迴圈的第一次迭代中檢查 arr[i]%j==0。

步驟 6 − 如果條件滿足,則將 flag 設定為 1 並中斷迴圈,因為如果元素在其一半之前不可被整除,則它將不會被任何其他數字在前面整除。

步驟 7 − 執行迴圈直到它終止,如果在任何迭代中條件不滿足,則在迴圈外部檢查一個條件,如果 flag 等於 0 或陣列元素大於 1。

步驟 8 − 如果發現此條件為真,則表示該元素是素數,因此列印它。

步驟 9 − 使用 fmt.printf() 函式執行列印語句,其中包含 %d,用於列印陣列元素。

示例

Go 語言程式,透過在主函式中將陣列元素減半來查詢素數

package main
import "fmt"
func main() {
   arr := [6]int{10, 11, 12, 13, 65, 73}
   fmt.Println("The array elements are: ", arr)
   
   var flag int = 0
   fmt.Printf("Prime Numbers: \n")
   for i := 0; i <= len(arr)-1; i++ {
      flag = 0
      for j := 2; j < arr[i]/2; j++ {
         if arr[i]%j == 0 {
            flag = 1
            break
         }
      }
      if flag == 0 && arr[i] > 1 {
         fmt.Printf("%d ", arr[i])
      }
   }
}

輸出

The array elements are:  [10 11 12 13 65 73]
Prime Numbers: 
11 13 73 

方法 2:在使用者定義函式中使用平方根

在這種方法中,我們將建立一個外部函式,並將範圍作為引數,然後將使用 sqrt 函式查詢元素的平方根,從中我們可以檢查數字是否可以被該範圍內的數字整除。讓我們來看一看,瞭解更多資訊。

演算法

步驟 1 − 建立一個包 main,並在程式中匯入 fmt 和 math 包。

步驟 2 − 建立一個名為 printPrimeNumbers 的函式,其引數 num1 和 num2 表示要從中搜索素數的範圍。

步驟 3 − 在函式中檢查條件,即範圍 num1 小於 2 且 num 也小於 2,如果條件滿足,則列印數字大於 2 並返回。

步驟 4 − 執行一個迴圈,直到 num1<=num2 將 isprime 標誌設定為 true,並執行一個內部迴圈,從 i=0 到 i <= int(math.Sqrt(float64(num1))),其中 sqrt 用於查詢陣列元素的平方根。

步驟 5 − 檢查條件,如果 num1 可被整除,則將 isprime 設定為 false,中斷迴圈並增加 num1 的值。

步驟 6 − 但是,如果在任何迭代中條件不滿足,則迴圈終止並列印素數。

步驟 7 − 從 main 中呼叫函式,並將範圍元素作為引數。

步驟 8 − 使用 fmt.Println() 函式執行列印語句。

示例

Go 語言程式,使用使用者建立函式中的 sqrt 函式從陣列中查詢素數

package main
import (
   "fmt"
   "math"
)
func printPrimeNumbers(num1, num2 int) {
   if num1 < 2 || num2 < 2 {
      fmt.Println("Numbers must be greater than 2.")
      return
      
   }
   for num1 <= num2 {
      isPrime := true
      for i := 2; i <= int(math.Sqrt(float64(num1))); i++ {
         if num1%i == 0 {
            isPrime = false
            break
            
         }
      }
      if isPrime {
         fmt.Printf("%d ", num1)
      }
      num1++
      
   }
   
}
func main() {
   var range1 int = 4
   var range2 int = 100
   fmt.Println("The range from which prime numbers have to be searched is from", range1, "to", range2)
   fmt.Println("The following prime numbers are: ")
   printPrimeNumbers(4, 100)
}

輸出

The range from which prime numbers have to be searched is from 4 to 100
The following prime numbers are: 
5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

結論

在上述教程中,我們使用兩種方法在陣列中搜索素數。在第一種方法中,我們使用了主函式,其中我們將陣列元素減半並搜尋素數。在第二種方法中,我們使用了一個帶有 sqrt 方法的外部函式來查詢陣列元素的平方根並列印素數。因此,所有方法都成功執行。

更新於: 2023年2月13日

379 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告